ヘッドライト減光装置最終

こんにちは

お久しぶりです

前回の話から結構経ちましたが

いろいろありました

結局、3回ほど作りなおしました

不具合は走行中に動作がおかしくなる?

ledの表示で判るのですが

プログラムの動作Loopがしなくなる?

Loopの中にledが点灯するコードを入れているのですが

これが、点灯しっぱなし

それも必ずではない・・

なるべくコンパクトにするため配線がごちゃごちゃでしたが

基板の大きさよりも配線が重ならないようにと

試行錯誤して考えました

汚いですが配線パターン

Img005_r

実際の基板

Dsc_0824_r

結局、こうすることによってご動作なくなりました?

当初この基板をヘッドライトケースに何とか収めようとして

極力サイズを小さくと考えたのですが諦めました

下記のケースを作成してヘッドライトの下に取り付けました

Dsc_0832_r

どうしても解決できなかったことが

減光時のヘッドライトの明るさです

コード上は減光時最小値(1)にしたのですが

感覚的には60%くらいでしょうか

PCオシロで波形を見ると

波形が訛っている?ようで、これが原因だと思います

しかし、どうすれば改善できるのか・・・

結局諦めてこのままです

Dsc_0830_r

また、使用していない端子はそのままでいいのでしょうか?

例えばGND側あるいは+側に接続するとか?

とりあえずコード上で使用していない端子は

出力端子にしてLow出力に設定しました

最終コードを載せときます

————————-ここから—————————–

//—————————————————

//ヘッドライト減光装置ーーーー2015/4/10  Yamasawa_Masahiro

//Rev 2.11

//—————————————————-

//boolean Light_State = LOW;

const int pin2 = 2;

const int pin3 = 3;

const int pin4 = 4;

//const int pin5 = 5;

//const int pin6 = 6;

//const int pin7 = 7;

//const int pin8 = 8;

const int pin9 = 9;

const int pin10 = 10;

const int pin11 = 11;

const int pin12 = 12;

const int pin13 = 13;

const int pinA0 = 14;

const int pinA1 = 15;

const int pinA2 = 16;

const int pinA3 = 17;

const int pinA4 = 18;

const int pinA5 = 19;

boolean Loff_Flg = false;

boolean In_State;

const int Set_Time = 1500;//不感時間の

const int Delay_Time = 1000;//チェンジの無効時間

const int Light_Wait_Val = 20000;//ライト消灯までの時間

const int Light_Low_Val = 1;//減光時の明るさ

const int Delay_On_Time = 3;

const int Delay_Off_Time = 10;

const int Led_Out = 5;

const int N_In = 6;

const int N_State = 7 ;//ニュートラル表示用

const int State_Led = 8;//運転状態表示用Led

int Max_Val = 255;//明るさの最大値

int Min_Val = 0;//明るさの最小値

long Time_Val;

//—————————————————-

//—————————————————-

//===========================================

//入力の状態を簡単に変更できるように

//関数を作成

boolean  Get_Stats(void) {

  //入力がLOWでニュートラルの場合

  return digitalRead(N_In);

  //入力がHIGHでニュートラルの場合

  //return !digitalRead(N_In);

}

//———————

boolean Chk_Chg(boolean x, int val) {

  //xがtrueで減光時falseで点灯時

  //yはその時の明るさの数値

  //入力に変化がないときはなにもしないで抜け出す

  if (In_State == Get_Stats()) {

    Max_Val = 255;

    Min_Val = 0;

 

    return false;

  }

  //入力に変化があったなら

  if (x) {

    //減光時

    Min_Val = val;

 

  } else {

    //点灯時

    Max_Val = val;

  }

  //Serial.println("******");

   //Serial.println(val);

  return true;

}

//—————————————————-

//Ledの点滅サブルーチン

void Led_Blink(int C, int P, int Dly) {

  for (int s = 0; s < C; s++)

  {

    digitalWrite(State_Led, HIGH);

    delay(P);

    digitalWrite(State_Led, LOW);

    delay(Dly);

  }

}

//

//

void setup() {

  // put your setup code here, to run once:

        pinMode(pin2, OUTPUT);

 digitalWrite(pin2, LOW);

 pinMode(pin3, OUTPUT);

 digitalWrite(pin3, LOW);

 pinMode(pin4, OUTPUT);

 digitalWrite(pin4, LOW);

 pinMode(pin9, OUTPUT);

 digitalWrite(pin9, LOW);

 pinMode(pin10, OUTPUT);

 digitalWrite(pin10, LOW);

 pinMode(pin11, OUTPUT);

 digitalWrite(pin11, LOW);

 pinMode(pin12, OUTPUT);

 digitalWrite(pin12, LOW);

 pinMode(pin13, OUTPUT);

 digitalWrite(pin13, LOW);

 pinMode(pinA0, OUTPUT);

 digitalWrite(pinA0, LOW);

 pinMode(pinA1, OUTPUT);

 digitalWrite(pinA1, LOW);

 pinMode(pinA2, OUTPUT);

 digitalWrite(pinA2, LOW);

 pinMode(pinA3, OUTPUT);

 digitalWrite(pinA3, LOW);

 pinMode(pinA4, OUTPUT);

 digitalWrite(pinA4, LOW);

 pinMode(pinA5, OUTPUT);

 digitalWrite(pinA5, LOW);

  pinMode(N_In, INPUT_PULLUP);

  pinMode(Led_Out, OUTPUT);

  pinMode(N_State, OUTPUT);

  pinMode(State_Led, OUTPUT);

  Serial.begin(9600);

  In_State = Get_Stats();

  digitalWrite(N_State, !In_State); //13番をニュートラル表示と同じに

  //——————————–

  //入力と出力を

  if (In_State) {

    analogWrite(Led_Out, 255);

  } else {

    analogWrite(Led_Out, 0);

  }

  //——————————–

  //——————————–

  Serial.println("SetUp—start!");

}

//===========================================

//===========================================

//===========================================

//===========================================

//———————–

//———————-

void loop() {

  //==========================================

  //現行時間が一定時間すぎれば完全に消灯

  //Serial.println(LOFF_Flg);

  if (Loff_Flg) {

    // Led_Blink(3,400);//状態表示を3回表示

    if (Time_Val + Light_Wait_Val < millis()) {

      analogWrite(Led_Out, 0);

      Loff_Flg = false;

      Serial.println("Light_OFF");

    }

  }

  //一定時間が経過したら、入力の状態を確認

  delay(Delay_Time);

  //記憶している状態と現在の状態が同じなら何もしない

  if (In_State == Get_Stats()) {

    if (In_State) {

      //ライトONの状態なら

      Led_Blink(1, 10, 0); //状態表示を1回表示

    } else {

      //ライトOFFの状態なら

      if (Loff_Flg) {

        //減光時

        Led_Blink(2, 10, 400); //状態表示を2回表示

      } else {

        //完全消灯時

        Led_Blink(1, 500, 400); //状態表示をゆっくり回表示

      }

    }

    return;

  }

  //ここからスタート

  //

  //

  //Serial.println("Event Start");

  Loff_Flg = false;

  //状態の食い違いを合わせる

  In_State = Get_Stats();

  //———————————

  digitalWrite(N_State, !In_State);

  if (In_State) {

    //徐々に点灯

    for (int Led_Val = Min_Val; Led_Val <= 255; Led_Val++)

    {

      //Serial.println(Led_Val);

 

      analogWrite(Led_Out, Led_Val);

 

            if (Chk_Chg(false, Led_Val)) {

       return; //入力に変化があったら抜け出す

     }

     delay(Delay_On_Time);

    }

    Serial.println("——————–End———————–");

  } else {

    //徐々に消灯

    for (int Led_Val = Max_Val; Led_Val >= Light_Low_Val; Led_Val–)

    {

      //Serial.println(Led_Val);

 

      analogWrite(Led_Out, Led_Val);

      //Serial.println(Led_Val);

 

      if (Chk_Chg(true, Led_Val)) {

        return; //入力に変化があったら抜け出す

      }

    delay(Delay_Off_Time);

    }

    Serial.println("FFFFFFF");

    //————————————

    Time_Val = millis();

    Loff_Flg = true;

    //——————————————————

  }

//Serial.println("———————————-");

}//End

————-ここまで——————————

色々とありましたが、現在約1ヶ月半問題なく使用できています

今回の件はこれで完了とさせていただきます

m(__)m