Witam. To jest mój pierwszy program na Arduino, o dziwo działa. Oczywiście były pewne problemy ale z pomocą internetu i dedukcji byłem w stanie sobie z nimi poradzić.
Niestety nie mogę sobie dać rady zawieszaniem działania programu. Wygląda to tak, że czasem po podaniu zasilania program w ogóle nie startuje. Pomaga reset ale normalnie nie mam do niego dostępu bo sterownik jest zamontowany głęboko w aucie.
Podpowiedzcie proszę, czy w programie jest coś dziwnego co może powodować zawieszanie, czy to będzie raczej wina sprzętu lub zasilania.
Program po starcie powinien zaświecić światła dzienne, a w przypadku załączenia pozycyjnych wyłączyć je i umożliwić włączenie przeciwmgielnych. Sekcja miganie() to sygnalizacja potrzeby załączenia świateł mijania.
Jest dużo komentarzy ale to może pozwoli wam na podgląd moich 'eksperymentów' z programem. Np. na początku wyłączyłem cały warunek uzależniający załączenie świateł od pracującego silnika, bo pomiar napięcia się nie sprawdził. Muszę to zrobić przez sygnał '1' -silnik działa. Na razie w garażu za zimno na przeróbki instalacji.
Niestety nie mogę sobie dać rady zawieszaniem działania programu. Wygląda to tak, że czasem po podaniu zasilania program w ogóle nie startuje. Pomaga reset ale normalnie nie mam do niego dostępu bo sterownik jest zamontowany głęboko w aucie.
Podpowiedzcie proszę, czy w programie jest coś dziwnego co może powodować zawieszanie, czy to będzie raczej wina sprzętu lub zasilania.
Program po starcie powinien zaświecić światła dzienne, a w przypadku załączenia pozycyjnych wyłączyć je i umożliwić włączenie przeciwmgielnych. Sekcja miganie() to sygnalizacja potrzeby załączenia świateł mijania.
Jest dużo komentarzy ale to może pozwoli wam na podgląd moich 'eksperymentów' z programem. Np. na początku wyłączyłem cały warunek uzależniający załączenie świateł od pracującego silnika, bo pomiar napięcia się nie sprawdził. Muszę to zrobić przez sygnał '1' -silnik działa. Na razie w garażu za zimno na przeróbki instalacji.
Kod:
//wersja 2.2 4.01.2017 wyłączony serial , bez alternatora
//wejścia
int pozSw = 3;
int pmgSw = 4;
int oswZew = 2; //wej analog czujnik światła
int alter = A0; //wej analog napięcie
//wyjścia
int dzienneL = 5;
int dzienneP = 6;
int pmg = 8;
int pmgDio = 9;
int ciemnoDio = 10;
int jasnosc = 170; //wypełnienie PWM dziennych
int stanPmg = LOW;
int stanPmgSw;
int wczesniej = HIGH;
int i = 0;
int a = 735; ////teraz aku =684 alter=768
int d = 0;
long time = 0;
long debounce = 300; //do czytania pmgSw
void setup()
{
pinMode(pozSw, INPUT); //definicja wejść i wyjść
pinMode(pmgSw, INPUT);
pinMode(oswZew, INPUT);
pinMode(dzienneL, OUTPUT); //PWM dziennych
pinMode(dzienneP, OUTPUT);
pinMode(pmg, OUTPUT);
pinMode(pmgDio, OUTPUT);
pinMode(ciemnoDio, OUTPUT);
gasimy();
digitalWrite(ciemnoDio, LOW);
//Serial.begin(9600);
}
void loop()
{
//Serial.print("------------------***");
//Serial.println(analogRead(alter));
//if (analogRead(alter) > a )
//if (a == 735)
//{
if (d == 0)
{delay(1000);}
d = 1;
if (digitalRead(pozSw) == LOW) //załączone
{
//Serial.println("mijania");
digitalWrite(dzienneL, LOW);
digitalWrite(dzienneP, LOW);
bistab();
}
else //wyłączone
{
//Serial.println("dzienne");
digitalWrite(pmg, LOW);
digitalWrite(pmgDio, LOW);
stanPmg = LOW;
analogWrite(dzienneL, jasnosc);
analogWrite(dzienneP, jasnosc);
ciemno();
}
// }
//else //silnik wyłączony
// {
// gasimy();
// d = 0;
// }
}
void bistab()
{
stanPmgSw = digitalRead(pmgSw);
if(stanPmgSw == LOW && wczesniej == HIGH && millis() - time > debounce)
{
if(stanPmg == HIGH)
{
stanPmg = LOW;
//Serial.println("pmg wył");
}
else
{
stanPmg = HIGH;
//Serial.println("pmg zał");
}
time = millis();
}
digitalWrite(pmg, stanPmg);
digitalWrite(pmgDio, stanPmg);
wczesniej == stanPmgSw;
}
void gasimy()
{
digitalWrite(dzienneL, LOW);
digitalWrite(dzienneP, LOW);
digitalWrite(pmg, LOW);
digitalWrite(pmgDio, LOW);
stanPmg = LOW;
}
void ciemno() //za ciemno na dzienne
{
if (digitalRead(oswZew) == LOW && digitalRead(pozSw) == HIGH)
{
digitalWrite(ciemnoDio, LOW);
}
else
{
//Serial.println("-----Ciemno-----");
miganie();
}
}
void miganie()
{
i = i+1;
//Serial.println(i);
if (i == 800) //ciemno między impulsami
{
digitalWrite(ciemnoDio, HIGH);
delay(80);
digitalWrite(ciemnoDio, LOW);
delay(80);
digitalWrite(ciemnoDio, HIGH);
delay(80);
digitalWrite(ciemnoDio, LOW);
delay(80);
i = 0;
}
}