P/W-Autoモードプログラミング

前回のつづきで、PICマイコンのプログラム

 

前回の解析で、なんか、、予想以上に簡単なロジックでいけそうな感じだったので、

さらっと、書いてみます。

 AUTOでWINDOWを閉める動作部分です。

if(V == 4){
  //  Auto UP
  N1on();//【UP開始】
  __delay_ms(200);//【0.2秒待つ】
  int Amax  = getRVRval();//【MAX設定値読み込み】
  int Amin  = getLVRval();//【MIN設定値読み込み】
  while(1){//【LOOP開始】
    //——————————————
    //  push other button
    //——————————————
    int V2 = getMenuButton();//【その他のボタンを押下をチェック】
    if(V2 && (V2 != V)){ //【他のボタンが押されてたら終了】
      allClear();//【全てOFF】
      break;
    }
    //——————————————
    //  push when closed
    //——————————————
    int A1 = getAin1();//【電流取得】
    if(A1 > Amax){  // 【MAXより多かったら終了】
      allClear();
      break;
    }
    //——————————————
    //  normal
    //——————————————
    if(A1 > Amin){//【MIN値よりも電流が多い場合】
      Delay(150);//【0.15秒待機】
      int A2 = getAin1();//【今一度電流チェック】
      if(A2 > Amax){   // 【MAXより多かったら閉まってると判断し終了】
        allClear();
        break;
      }else{        // 【MAXほどは多くなっていない➡何かが挟まってると判定】
        allClear();//【全て止める】
        N2on();      // 【WINDOW下げる】 window down
        Delay(500);//【0.5秒待機】
        N2off();//【WINDOW下げる終了】
        break;
      }
    }
    //——————————————
    __delay_ms(50);
  }
}

まぁこんな感じではないかと。

雑関数は以下。

//——————————————————————–
//  Getting Menu Button Number
//——————————————————————–
int getMenuButton(void){
  int A = ADC_GetConversion(AIN_RB3);  //  RB3 Menu Analog In
  int V = 0;
  if(A < 64)      V = 0;
  else if(A < 192)  V = 1;
  else if(A < 320)  V = 2;
  else if(A < 448)  V = 3;
  else if(A < 576)  V = 4;
  else if(A < 704)  V = 5;
  else if(A < 832)  V = 6;
  else if(A < 960)  V = 7;
  else if(A >=960)  V = 8;
  return  V;
}
//——————————————————————–
//  Getting Right Volume value
//——————————————————————–
int getRVRval(void){
  int A = ADC_GetConversion(AIN_RB4);  //  from RIGHT VR voltage(may be 0 to 512)
  return  A;
}
//——————————————————————–
//  Getting Left Volume value
//——————————————————————–
int getLVRval(void){
  int A = ADC_GetConversion(AIN_RB5);  //  from LEFT VR voltage(may be 0 to 512)
  return  A;
}
//——————————————————————–
//  Getting value from Analog #1
//——————————————————————–
int getAin1(void){
  int A = ADC_GetConversion(AIN_RB1);
  return  A;
}
//——————————————————————–
//  Getting value from Analog #2
//——————————————————————–
int getAin2(void){
  int A = ADC_GetConversion(AIN_RB2);
  return  A;
}
//——————————————————————–

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です