Search code examples
flasharduinoarduino-uno

Arduino digitalwrite not working like it should


So i have problems with my little project, i am making fog light turn signal mod. To be specific - when one of the turn signals are flashing then that side fog light is turn on(without flashing). If the fog lights are ON then opposite side fog light of the turning signal lights will turn off.

About the code: Everything is working just fine except pin 5 gives relay to turn on and off pretty fast and it doesn't matter if pin 12 is HIGH or LOW it is still flashing. Flashing only appears if pin 5 is at HIGH position.

Code it self:

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);
        }        
}
}

Solution

  • Think about the usage of

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

    as opposed to this

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

    The point is that, by tracing your code, it checks pin#5 then turn on the signal wait a for a while then it checks for pin #4 and this check evaluates to false. Therefore, it turns OFF both the signals and wait for a bit. Then in the next cycle, it does the same thing again and again. That is where the blinking happens. Try this code:

    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);
            }        
    }
    }