 # Simple counting/increment per iteration

Hello, thanks for taking the time to even read my post with the expectation of offering help!

I am trying to simply light 10 LEDs in sequence from low to high, DONE
I am trying to simply light 10 LEDs in sequence from high to low, DONE
I am trying to change the timing/delay of each afore mentioned events, DONE
I am trying to make any part of this stop after n times (n is the number of times I will choose) FAIL
-also, how do I get more than one LED to light simultaneously?

So, I got the sequencing but cannot get a DO, WHILE, DO WHILE, or FOR to stop the looping, EVER.

I declared an integer [loops] and tried to increment/decrement using loops++, loops–, ++loops, --loops, loops +1, loops - 1, loops = loops -1, loops = loops +1, loops != 1, loops !0 (I read that when the WHILE becomes FALSE is when the event is recognized)

here is the last attempt with some of the bad code commented out

//int thisPin = 0;
int timer = 100; // The higher the number, the slower the timing.
int pinCount = 10; // using 10 LEDs
// int loops = 3; //FAIL
// int thisPin;
void setup() {
// use a for loop to initialize each pin as an output:
for (int thisPin = 1; thisPin < pinCount; thisPin++) {
pinMode(thisPin, OUTPUT);
}
}

void loop() {
int loops = 3; //FAIL
while ( loops != 1 ){ //fAIL
// loops - 1;
for (int thisPin = 1; thisPin < pinCount; thisPin++) {
// turn the pin on:
digitalWrite(thisPin, HIGH);
delay(timer);
// turn the pin off:
digitalWrite(thisPin, LOW);
}
}
}

Please edit your post, select the code, and put it between [code][/code] tags.

You can do that by hitting the # button above the posting area.

This will certainly fail:

``````int loops = 3;   //FAIL
while ( loops != 1 ){  //fAIL
``````

``````for (int loops = 0; loops < 3; loops++)
{
// do something
}
``````

use CTRL-T in the IDE to auto layout the code

``````void loop()
{
int loops = 3;
while ( loops != 1 )
{
loops = loops - 1;
for (int thisPin = 1; thisPin < pinCount; thisPin++)
{
digitalWrite(thisPin, HIGH);
delay(timer);
digitalWrite(thisPin, LOW);
delay(timer);
}
}
while(1); // block forever
}
``````

Nick Gammon Global Moderator

This will certainly fail:

Code:

int loops = 3; //FAIL while ( loops != 1 ){ //fAIL

Thanks for pointing that out, but why will it certainly fail?

robtillaart Netherlands,

thank you! i will compare what you did to what i have tried.

robtillaart Netherlands

I tried what you did and that does not work for me either. your code runs the method 1 time then stops, and I don't understand what you are trying to do with what you posted.

SO, I still do not have a way to stop the sequence after n times, any help????

Thanks all

yost87: I tried what you did and that does not work for me either. your code runs the method 1 time then stops, and I don't understand what you are trying to do with what you posted.

SO, I still do not have a way to stop the sequence after n times, any help????

Change the loops #.

See if this is easier to understand. Code is not tested.

``````int count = 0;
void setup(void) {
}

void loop(void) {
count++;
if (count <=8) // change 8 to number you want
{
ledSequence();
}
}

void ledSequence()
{
//do stuff here
}
``````

Arrch California

i tried to change the integer and that did not work either...

Try this:

``````void loop() {
static int loops = 3;   //FAIL - stops after the 3rd time
loops =  loops - 1;
if ( loops){  //fAIL
for (int thisPin = 1; thisPin < pinCount; thisPin++) {
// turn the pin on:
digitalWrite(thisPin, HIGH);
delay(timer);
// turn the pin off:
digitalWrite(thisPin, LOW);
}
}
``````

Pauly,

Thanks but no go! That did not work either. How something so simple be so difficult???

Still n o solution…

``````int count = 0;
int timer = 100;
void setup(void) {
// use a for loop to initialize each pin as an output:
for (int thisPin = 1; thisPin < 10; thisPin++)  {
pinMode(thisPin, OUTPUT);
}
}

void loop(void) {
count++;
if (count <=8) // change 8 to number you want
{
//do stuff here
for (int thisPin = 10; thisPin >= 1; thisPin--) {
// turn the pin on:
digitalWrite(thisPin, HIGH);
delay(timer);
// turn the pin off:
digitalWrite(thisPin, LOW);

}
}
}
``````

Moving one line:

``````void loop() {
static int loops = 3;   //FAIL - stops after the 3rd time
if ( loops){  //fAIL
loops =  loops - 1;
for (int thisPin = 1; thisPin < pinCount; thisPin++) {
// turn the pin on:
digitalWrite(thisPin, HIGH);
delay(timer);
// turn the pin off:
digitalWrite(thisPin, LOW);
}
}
``````
``````void loop(void) {
count++;
if (count <=8) // change 8 to number you want
{
``````

What happens here is that as count gets incremented passing 8, the “if” section will not be executed. However, count will roll-over and the “if” section gets executed.

Instead, if you put the “count++” inside the “if”, you will be fine.

dHenry, thanks!!! I tweaked what you posted and got this which works…
Thanks all!

``````int timer = 100;           // The higher the number, the slower the timing.
int pinCount = 10;
void setup() {
// use a for loop to initialize each pin as an output:
for (int thisPin = 1; thisPin < 10; thisPin++)  {
pinMode(thisPin, OUTPUT);
}
}

void loop() {
static int loops = 6;   //FAIL - stops after the 3rd time
if (loops > 0){  //fAIL
loops =  loops - 1;
for (int thisPin = 1; thisPin < pinCount; thisPin++) {
// turn the pin on:
digitalWrite(thisPin, HIGH);
delay(timer);
// turn the pin off:
digitalWrite(thisPin, LOW);
}
}
}
``````

Ah!!! Rolling over... okay, I can account for that in the future. It was not knowing why that was driving nuts (not the steering wheel in my lap).

Mucho grassyass! to all of you

yost87:

Nick Gammon
Global Moderator

This will certainly fail:

Code:

int loops = 3; //FAIL
while ( loops != 1 ){ //fAIL

Thanks for pointing that out, but why will it certainly fail?

I left out a line, sorry:

``````int loops = 3;   //FAIL
while ( loops != 1 ){  //fAIL
// loops - 1;
``````

First, you aren’t subtracting one. Second, this is not how you subtract one:

`````` loops - 1;
``````

What was wrong with my suggestion?

``````for (int loops = 0; loops < 3; loops++)
{
// do something
}
``````

``````void loop() {
static int loops = 6;   //FAIL - stops after the 3rd time
if (loops > 0){  //fAIL
loops =  loops - 1;
for (int thisPin = 1; thisPin < pinCount; thisPin++) {
// turn the pin on:
digitalWrite(thisPin, HIGH);
delay(timer);
// turn the pin off:
digitalWrite(thisPin, LOW);
}
``````
``````void loop()
{

for (int loops = 0; loops < 6; loops ++)
{

for (int thisPin = 1; thisPin < pinCount; thisPin++)
{
digitalWrite(thisPin, HIGH);
delay(timer);
digitalWrite(thisPin, LOW);
delay(timer);
} // end of for each pin

}  // end of for each loop

}  // end of loop
``````