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;
}
}
-
1Move the incrementation statement inside the do while loopchrisl– chrisl2020年04月24日 12:07:35 +00:00Commented Apr 24, 2020 at 12:07
1 Answer 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:
- Initializes x to 0 (first part of the
for
statement) - It checks the condition
x < 5' (second part of the
forstatement). If false, it continues with the first statement after the
for` body (after the } bracket). - It runs the body of the loop (inside the brackets)
- It increases x (third part of the
for
statement) - 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.
-
1Thanks 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 conditionsMr Digs– Mr Digs2020年04月24日 12:26:42 +00:00Commented Apr 24, 2020 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– Michel Keijzers2020年04月24日 13:11:22 +00:00Commented Apr 24, 2020 at 13:11