Go Down

### Topic: Simple counting/increment per iteration (Read 3427 times)previous topic - next topic

#### yost87

##### Nov 08, 2012, 09:20 pm
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);
}
}
}

#### nickgammon

#1
##### Nov 08, 2012, 09:35 pm
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.
Please post technical questions on the forum, not by personal message. Thanks!

#### nickgammon

#2
##### Nov 08, 2012, 09:37 pm
This will certainly fail:

Code: [Select]
`int loops = 3;   //FAILwhile ( loops != 1 ){  //fAIL`

Code: [Select]
`for (int loops = 0; loops < 3; loops++)  {  // do something  }`
Please post technical questions on the forum, not by personal message. Thanks!

#### robtillaart

#3
##### Nov 08, 2012, 09:40 pm
use CTRL-T in the IDE to auto layout the code

Code: [Select]
`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}`
Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

#### yost87

#4
##### Nov 08, 2012, 09:52 pm
Quote
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?

#### yost87

#5
##### Nov 08, 2012, 09:53 pm
robtillaart
Netherlands,

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

#### yost87

#6
##### Nov 08, 2012, 10:04 pm
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

#### Arrch

#7
##### Nov 08, 2012, 10:22 pmLast Edit: Nov 08, 2012, 10:25 pm by Arrch Reason: 1

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 #.

#### Pauly

#8
##### Nov 08, 2012, 10:23 pm
See if this is easier to understand. Code is not tested.

Code: [Select]
`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}`

#### yost87

#9
##### Nov 08, 2012, 10:25 pm
Arrch
California

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

#### dhenry

#10
##### Nov 08, 2012, 10:25 pm
Try this:

Code: [Select]
`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);     }}`

#### yost87

#11
##### Nov 08, 2012, 10:36 pm
Pauly,

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

Still n o solution...

Code: [Select]
`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);  }}}`

#### dhenry

#12
##### Nov 08, 2012, 10:39 pm
Moving one line:

Code: [Select]
`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);    }}`

#### dhenry

#13
##### Nov 08, 2012, 10:40 pm
Code: [Select]
`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.

#### yost87

#14
##### Nov 08, 2012, 10:48 pmLast Edit: Nov 08, 2012, 10:54 pm by yost87 Reason: 1
dHenry, thanks!!!  I tweaked what you posted and got this which works...
Thanks all!

Code: [Select]
`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);    }}}`

Go Up