Pages: [1] 2   Go Down
Author Topic: Simple counting/increment per iteration  (Read 571 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Global Moderator
Offline Offline
Brattain Member
*****
Karma: 452
Posts: 18694
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Global Moderator
Offline Offline
Brattain Member
*****
Karma: 452
Posts: 18694
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

This will certainly fail:

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

What about:

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

Global Moderator
Netherlands
Offline Offline
Shannon Member
*****
Karma: 170
Posts: 12483
In theory there is no difference between theory and practice, however in practice there are many...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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
}
Logged

Rob Tillaart

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

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

robtillaart
Netherlands,

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

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

California
Offline Offline
Faraday Member
**
Karma: 82
Posts: 3123
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


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 #.
« Last Edit: November 08, 2012, 04:25:32 pm by Arrch » Logged

Boston
Offline Offline
God Member
*****
Karma: 3
Posts: 575
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
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
}
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Arrch
California

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

Offline Offline
Edison Member
*
Karma: 116
Posts: 2205
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Try this:

Code:
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);    
 }
}
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pauly,

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

Still n o solution...

Code:
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);
 
}
}
}
Logged

Offline Offline
Edison Member
*
Karma: 116
Posts: 2205
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Moving one line:

Code:
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);   
 }
}
Logged

Offline Offline
Edison Member
*
Karma: 116
Posts: 2205
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
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.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
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);   
 }
}
}
« Last Edit: November 08, 2012, 04:54:17 pm by yost87 » Logged

Pages: [1] 2   Go Up
Jump to: