Go Down

Topic: Simple counting/increment per iteration (Read 987 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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy