こんにちは
お久しぶりです
前回の話から結構経ちましたが
いろいろありました
結局、3回ほど作りなおしました
不具合は走行中に動作がおかしくなる?
ledの表示で判るのですが
プログラムの動作Loopがしなくなる?
Loopの中にledが点灯するコードを入れているのですが
これが、点灯しっぱなし
それも必ずではない・・
なるべくコンパクトにするため配線がごちゃごちゃでしたが
基板の大きさよりも配線が重ならないようにと
試行錯誤して考えました
汚いですが配線パターン
実際の基板
結局、こうすることによってご動作なくなりました?
当初この基板をヘッドライトケースに何とか収めようとして
極力サイズを小さくと考えたのですが諦めました
下記のケースを作成してヘッドライトの下に取り付けました
どうしても解決できなかったことが
減光時のヘッドライトの明るさです
コード上は減光時最小値(1)にしたのですが
感覚的には60%くらいでしょうか
PCオシロで波形を見ると
波形が訛っている?ようで、これが原因だと思います
しかし、どうすれば改善できるのか・・・
結局諦めてこのままです
また、使用していない端子はそのままでいいのでしょうか?
例えば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