Go Down

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

yost87

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);   
}
}
}

Nick Gammon

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!

More info:
http://www.gammon.com.au/electronics

Nick Gammon

This will certainly fail:

Code: [Select]

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


What about:

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

More info:
http://www.gammon.com.au/electronics

robtillaart

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

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

robtillaart
Netherlands,

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

yost87

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 pm Last 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

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

Arrch
California

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

dhenry

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

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

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

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 pm Last 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