If Statement problem

Trying to get one LED to copy what another LED does?

Attempting to learn coding, when I put the "if" statement in the led1 does not light up.

What am I doing wrong?

int led1 = 13;
int led2 = 12;
int led3 = 11;
int led4 = 10;

int delayH = 500;
int delayL = 500;
int delayBreak = 50;


void setup() {
  // put your setup code here, to run once:
if (led1 = HIGH) {
  digitalWrite (3, HIGH);
}

  pinMode(led1, OUTPUT);  // initiates led pin as an output
  pinMode(led2, OUTPUT);  //   ""
  pinMode(led3, OUTPUT);  //   ""
  pinMode(led4, OUTPUT);  //   ""
}

void loop() {
  // put your main code here, to run repeatedly:

  //flash sequence left to right of LEDs
  digitalWrite(led1, HIGH);  //digital writes led as a high
  delay(delayH);             //provides a delay as per int delayH
  digitalWrite(led1, LOW);   //digital writes led as a low
  delay(delayL);             //provides a delay as per int delayL

  digitalWrite(led2, HIGH);  //digital writes led as a high
  delay(delayH);             //provides a delay as per int delayH
  digitalWrite(led2, LOW);   //digital writes led as a low
  delay(delayL);             //provides a delay as per int delayL

  digitalWrite(led3, HIGH);  //digital writes led as a high
  delay(delayH);             //provides a delay as per int delayH
  digitalWrite(led3, LOW);   //digital writes led as a low
  delay(delayL);             //provides a delay as per int delayL

  digitalWrite(led4, HIGH);  //digital writes led as a high
  delay(delayH);             //provides a delay as per int delayH
  digitalWrite(led4, LOW);   //digital writes led as a low
  delay(delayL);             //provides a delay as per int delayL

  delay(delayBreak);         //provides a delay as per int delayBreak

  //flash sequence right to left of LEDs
  digitalWrite(led4, HIGH);  //digital writes led as a high
  delay(delayH);             //provides a delay as per int delayH
  digitalWrite(led4, LOW);   //digital writes led as a low
  delay(delayL);             //provides a delay as per int delayL

  digitalWrite(led3, HIGH);  //digital writes led as a high
  delay(delayH);             //provides a delay as per int delayH
  digitalWrite(led3, LOW);   //digital writes led as a low
  delay(delayL);             //provides a delay as per int delayL

  digitalWrite(led2, HIGH);  //digital writes led as a high
  delay(delayH);             //provides a delay as per int delayH
  digitalWrite(led2, LOW);   //digital writes led as a low
  delay(delayL);             //provides a delay as per int delayL

  digitalWrite(led1, HIGH);  //digital writes led as a high
  delay(delayH);             //provides a delay as per int delayH
  digitalWrite(led1, LOW);   //digital writes led as a low
  delay(delayL);

  delay(delayBreak);  //provides a delay as per int delayBreak
}

You need == in a compare. What you wrote was assign HIGH to led1

In the IDE, go to File, and turn all compiler warninngs on. Next time you leave out an =, you will get a warning.

Cheers JimLee, that fixed the led1 not switching on but my pin 3 is not switching on (I have an LED in pin 3)



int led1 = 13;
int led2 = 12;
int led3 = 11;
int led4 = 10;

int delayH = 500;
int delayL = 500;
int delayBreak = 50;


void setup() {
  // put your setup code here, to run once:
if (led1 == HIGH) {
  digitalWrite (3, HIGH);
}

  pinMode(led1, OUTPUT);  // initiates led pin as an output
  pinMode(led2, OUTPUT);  //   ""
  pinMode(led3, OUTPUT);  //   ""
  pinMode(led4, OUTPUT);  //   ""
  pinMode(3, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:

  //flash sequence left to right of LEDs
  digitalWrite(led1, HIGH);  //digital writes led as a high
  delay(delayH);             //provides a delay as per int delayH
  digitalWrite(led1, LOW);   //digital writes led as a low
  delay(delayL);             //provides a delay as per int delayL

  digitalWrite(led2, HIGH);  //digital writes led as a high
  delay(delayH);             //provides a delay as per int delayH
  digitalWrite(led2, LOW);   //digital writes led as a low
  delay(delayL);             //provides a delay as per int delayL

  digitalWrite(led3, HIGH);  //digital writes led as a high
  delay(delayH);             //provides a delay as per int delayH
  digitalWrite(led3, LOW);   //digital writes led as a low
  delay(delayL);             //provides a delay as per int delayL

  digitalWrite(led4, HIGH);  //digital writes led as a high
  delay(delayH);             //provides a delay as per int delayH
  digitalWrite(led4, LOW);   //digital writes led as a low
  delay(delayL);             //provides a delay as per int delayL

  delay(delayBreak);         //provides a delay as per int delayBreak

  //flash sequence right to left of LEDs
  digitalWrite(led4, HIGH);  //digital writes led as a high
  delay(delayH);             //provides a delay as per int delayH
  digitalWrite(led4, LOW);   //digital writes led as a low
  delay(delayL);             //provides a delay as per int delayL

  digitalWrite(led3, HIGH);  //digital writes led as a high
  delay(delayH);             //provides a delay as per int delayH
  digitalWrite(led3, LOW);   //digital writes led as a low
  delay(delayL);             //provides a delay as per int delayL

  digitalWrite(led2, HIGH);  //digital writes led as a high
  delay(delayH);             //provides a delay as per int delayH
  digitalWrite(led2, LOW);   //digital writes led as a low
  delay(delayL);             //provides a delay as per int delayL

  digitalWrite(led1, HIGH);  //digital writes led as a high
  delay(delayH);             //provides a delay as per int delayH
  digitalWrite(led1, LOW);   //digital writes led as a low
  delay(delayL);

  delay(delayBreak);  //provides a delay as per int delayBreak
}`

Had a look in File, can't find where to change settings for compiler warnings?

This part is in setup put this part in loop

What is led1? Looking at the number, it's a pin.

Even if you do the correct compare in the if condition, the condition will always evaluate to false. Reason is that HIGH is defined as 1 and 13 is never equal to 1.

It's file / preferences.

File -> Preferences -> Compiler warnings
Set it to ALL

Got it:)

So if I change pin 13 to pin 9 it should worK?

You need to use code like this

if (digitalRead(led1) == HIGH) {
  digitalWrite (3, HIGH);
}

Also put this part in loop

Still no good:(

int led1 = 9;
int led2 = 12;
int led3 = 11;
int led4 = 10;

int delayH = 500;
int delayL = 500;
int delayBreak = 50;


void setup() {
  // put your setup code here, to run once:


  pinMode(led1, OUTPUT);  // initiates led pin as an output
  pinMode(led2, OUTPUT);  //   ""
  pinMode(led3, OUTPUT);  //   ""
  pinMode(led4, OUTPUT);  //   ""
  pinMode(3, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:

 if (led1 == HIGH) {
  digitalWrite (3, HIGH);
} 
  
  //flash sequence left to right of LEDs
  digitalWrite(led1, HIGH);  //digital writes led as a high
  delay(delayH);             //provides a delay as per int delayH
  digitalWrite(led1, LOW);   //digital writes led as a low
  delay(delayL);             //provides a delay as per int delayL

  digitalWrite(led2, HIGH);  //digital writes led as a high
  delay(delayH);             //provides a delay as per int delayH
  digitalWrite(led2, LOW);   //digital writes led as a low
  delay(delayL);             //provides a delay as per int delayL

  digitalWrite(led3, HIGH);  //digital writes led as a high
  delay(delayH);             //provides a delay as per int delayH
  digitalWrite(led3, LOW);   //digital writes led as a low
  delay(delayL);             //provides a delay as per int delayL

  digitalWrite(led4, HIGH);  //digital writes led as a high
  delay(delayH);             //provides a delay as per int delayH
  digitalWrite(led4, LOW);   //digital writes led as a low
  delay(delayL);             //provides a delay as per int delayL

  delay(delayBreak);         //provides a delay as per int delayBreak

  //flash sequence right to left of LEDs
  digitalWrite(led4, HIGH);  //digital writes led as a high
  delay(delayH);             //provides a delay as per int delayH
  digitalWrite(led4, LOW);   //digital writes led as a low
  delay(delayL);             //provides a delay as per int delayL

  digitalWrite(led3, HIGH);  //digital writes led as a high
  delay(delayH);             //provides a delay as per int delayH
  digitalWrite(led3, LOW);   //digital writes led as a low
  delay(delayL);             //provides a delay as per int delayL

  digitalWrite(led2, HIGH);  //digital writes led as a high
  delay(delayH);             //provides a delay as per int delayH
  digitalWrite(led2, LOW);   //digital writes led as a low
  delay(delayL);             //provides a delay as per int delayL

  digitalWrite(led1, HIGH);  //digital writes led as a high
  delay(delayH);             //provides a delay as per int delayH
  digitalWrite(led1, LOW);   //digital writes led as a low
  delay(delayL);

  delay(delayBreak);  //provides a delay as per int delayBreak
}

To make led3 do what led1 is doing with your delay-based coding, you'll have to duplicate the writes:

  digitalWrite(led1, HIGH);  //digital writes led as a high
  digitalWrite(led3, HIGH);  //digital writes led as a high
  delay(delayH);             //provides a delay as per int delayH
  digitalWrite(led1, LOW);   //digital writes led as a low
  digitalWrite(led3, LOW);   //digital writes led as a low
  delay(delayL);             //provides a delay as per int delayL

You could treat led1 as a button and write:

  digitalWrite(led1, HIGH);  //digital writes led as a high
  digitalWrite(led3, digitalRead(led1));  //digital writes led as a high
  delay(delayH);             //provides a delay as per int delayH
  digitalWrite(led1, LOW);   //digital writes led as a low
  digitalWrite(led3, digitalRead(led1));   //digital writes led as a low
  delay(delayL);             //provides a delay as per int delayL

...but using delays means that you have to make the changes at the same time--in between the delays.

Or maybe I don't understand the behavior you want.

Just trying to get an led on pin 3 to copy what led1 does.

Could you explain how do want to light the led your current code will not light up the led in 3 rd pin

image

3 Likes

Just want pin 3 to replicate whatever led1 is. Might have to use "if else" perhaps??

I'll have to leave it a bit, got to drop the boss off at the airport.

Thanks guys.