0

I am new to Arduino programming and I would like to ask a question.

Firstly apologies if this has been answered before and I understand if it gets locked if this has been answered elsewhere.

I am trying to get three LED's (red, amber, green) to loop 5 times (in a do loop).

for this I have created a integer variable (x) and initialised the variable to 0.

I then increase x by 1 each time.

However I cannot get them to stop looping when x is greater than 5. The program does work as expected for everything else (green LED lit, wait 1 sec, Yellow LED lit, wait 1 sec, red LED lit and then loop).

   //set LED pins
int greenPin = 13;
int yellowPin = 12;
int redPin = 11;

void setup()
{
  pinMode(greenPin, OUTPUT);      // sets the digital pin as output
  pinMode(yellowPin, OUTPUT);
  pinMode(redPin, OUTPUT);
}

void loop(){
int x = 0;

 do {
  digitalWrite(greenPin, HIGH);   // sets the LED on
  delay(1000);                  // waits for a second
  digitalWrite(greenPin, LOW); 
  digitalWrite(yellowPin, HIGH);    // sets the LED off
  delay(1000);
  digitalWrite(yellowPin, LOW);// waits for a second
  digitalWrite(redPin, HIGH);    // sets the LED off
  delay(1000);
  digitalWrite(redPin, LOW);
 }
   while(x<=5); {
    x = x + 1;
   }
}
1
  • 1
    Move the incrementation statement inside the do while loop – chrisl Apr 24 '20 at 12:07
1

Chrisl already gave the clue.

However, to add a comment with a code example I use the answer box.

In C you have more or less two kind of loops:

  • for
  • do / while

The first one is when you know beforehand how many iterations you have, the second when it depends on external input (e.g. when you expect a value acquired from within the loop).

In your case, you can better use the for loop, so you get:

for (x = 0; x < 6; x++)
{
   ...
}

What this does i:

  1. Initializes x to 0 (first part of the for statement)
  2. It checks the condition x < 5' (second part of theforstatement). If false, it continues with the first statement after thefor` body (after the } bracket).
  3. It runs the body of the loop (inside the brackets)
  4. It increases x (third part of the for statement)
  5. It continues with 2

Also it is quite common for the condition to include the start element of the ragne (x = 0), but exclude the end element of the range (x < 6), thus it runs the last time with x == 5.

2
  • 1
    Thanks for the answers. As I am learning this I am trying to complete an excercise such as the one below: Green LED On Wait 1 sec Green LED Off Yellow LED on Wait 1 sec Yellow LED Off Red LED on.. Do this for 5 iterations. It does state in the exercise that I must use a do while loop. As I am specifically limited to the above conditions – Mr Digs Apr 24 '20 at 12:26
  • @MrDigs ok if the exercise has that limitation, than do so. It's just not the most usual way in this case. You can try both for yourself to see the difference if you have time. – Michel Keijzers Apr 24 '20 at 13:11

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.