2015-03-18 5 views
0

Итак, у меня проблемы с моим маленьким проектом, я делаю модус сигнала поворота тумана. Чтобы быть конкретным - когда один из сигналов поворота мигает, тогда загорается противотуманная фара (без мигания). Если противотуманные фары ВКЛЮЧЕНЫ, то противоположная противотуманная фара сигнальных ламп поворота выключится.Arduino digitalwrite теперь работает так, как должно

О коде: Все работает отлично, за исключением того, что контакт 5 дает реле включать и выключать довольно быстро, и не имеет значения, если контакт 12 HIGH или LOW он все еще мигает. Мигает, только если контакт 5 находится в положении ВЫСОКОГО.

Код это сам:

int MiglaK = 9;  //Right foglight 
int MiglaL = 8;  //Left fog light 
int PagrK = 4;  //Right turn signal 
int PagrL = 5;  //Left turn signal 
int Miglinieki = 12; //Fog ON 
int val = 0; 

void setup() { 
pinMode(MiglaK, OUTPUT); 
pinMode(MiglaL, OUTPUT); 
pinMode(PagrK, INPUT); 
pinMode(PagrL, INPUT); 
pinMode(Miglinieki, INPUT); 
} 

void loop() { 
//**********Fogs are OFF********** 

val = digitalRead(Miglinieki); 
if (val == LOW) 
{ 
    //****Hazzard lights**** 
    if (digitalRead(PagrL) == HIGH && digitalRead(PagrK) == HIGH) 
     { 
     digitalWrite(MiglaL,LOW); 
     digitalWrite(MiglaK,LOW); 
     delay(700); 
     } 
    //****Left turn signal**** 
    if (digitalRead(PagrL) == HIGH) 
     { 
     digitalWrite(MiglaL, HIGH); 
     delay(700); 
     } 
    //****Right turn signal**** 
    if (digitalRead(PagrK) == HIGH) 
     { 
     digitalWrite(MiglaK, HIGH); 
     delay(700); 
     } 
    else 
     { 
     digitalWrite(MiglaL,LOW); 
     digitalWrite(MiglaK,LOW); 
     delay(100); 
     } 

} 

//**********Fog are ON********** 

if (val == HIGH) 
{ 
    //****Hazzard lights**** 
    if (digitalRead(PagrL) == HIGH && digitalRead(PagrK) == HIGH) 
     { 
     digitalWrite(MiglaL,HIGH); 
     digitalWrite(MiglaK,HIGH); 
     delay(700); 
     } 
    //****Left turn signal**** 
    if (digitalRead(PagrL) == HIGH) 
     { 
     digitalWrite(MiglaK, LOW); 
     delay(700); 
     } 
    //****Right turn signal**** 
    if (digitalRead(PagrK) == HIGH) 
     { 
     digitalWrite(MiglaL, LOW); 
     delay(700); 
     } 
    else 
     { 
     digitalWrite(MiglaL,HIGH); 
     digitalWrite(MiglaK,HIGH); 
     delay(100); 
     }   
} 
} 

ответ

1

Подумайте об использовании

if(/*Condition 1*/){ 
//Some code 
} else if (/*Condition 2*/){ 
//Some other code 
} else{ 
//And a bit more code 
} 

в противоположность этому

if(/*Condition 1*/){ 
//Some code 
} 
if (/*Condition 2*/){ 
//Some other code 
} else{ 
//And a bit more code 
} 

Дело в том, что, путем отслеживания кода, он проверяет pin # 5, затем включите сигнал, подождите некоторое время, после чего он проверяет на вывод №4, и эта проверка будет равна false. Поэтому он выключает оба сигнала и ждет немного. Затем в следующем цикле он делает то же самое снова и снова. Именно там происходит мигание. Попробуйте этот код:

int MiglaK = 9;  //Right foglight 
int MiglaL = 8;  //Left fog light 
int PagrK = 4;  //Right turn signal 
int PagrL = 5;  //Left turn signal 
int Miglinieki = 12; //Fog ON 
int val = 0; 

void setup() { 
pinMode(MiglaK, OUTPUT); 
pinMode(MiglaL, OUTPUT); 
pinMode(PagrK, INPUT); 
pinMode(PagrL, INPUT); 
pinMode(Miglinieki, INPUT); 
} 

void loop() { 
//**********Fogs are OFF********** 

val = digitalRead(Miglinieki); 
if (val == LOW) 
{ 
    //****Hazzard lights**** 
    if (digitalRead(PagrL) == HIGH && digitalRead(PagrK) == HIGH) 
     { 
     digitalWrite(MiglaL,LOW); 
     digitalWrite(MiglaK,LOW); 
     delay(700); 
     } 
    //****Left turn signal**** 
    else if (digitalRead(PagrL) == HIGH) 
     { 
     digitalWrite(MiglaL, HIGH); 
     delay(700); 
     } 
    //****Right turn signal**** 
    else if (digitalRead(PagrK) == HIGH) 
     { 
     digitalWrite(MiglaK, HIGH); 
     delay(700); 
     } 
    else 
     { 
     digitalWrite(MiglaL,LOW); 
     digitalWrite(MiglaK,LOW); 
     delay(100); 
     } 

} 

//**********Fog are ON********** 

if (val == HIGH) 
{ 
    //****Hazzard lights**** 
    if (digitalRead(PagrL) == HIGH && digitalRead(PagrK) == HIGH) 
     { 
     digitalWrite(MiglaL,HIGH); 
     digitalWrite(MiglaK,HIGH); 
     delay(700); 
     } 
    //****Left turn signal**** 
    else if (digitalRead(PagrL) == HIGH) 
     { 
     digitalWrite(MiglaK, LOW); 
     delay(700); 
     } 
    //****Right turn signal**** 
    else if (digitalRead(PagrK) == HIGH) 
     { 
     digitalWrite(MiglaL, LOW); 
     delay(700); 
     } 
    else 
     { 
     digitalWrite(MiglaL,HIGH); 
     digitalWrite(MiglaK,HIGH); 
     delay(100); 
     }   
} 
} 
+1

Я узнаю из-за своих недостатков :) Хотя я был так близок – Martins