Adding push button to control 10 LED pattern

Hello all,

I need help adding a push button to change the speed of the 10 Led pattern. The code is below, any help or ideas will be appreciated.

//  Blink LED1 for 1 second for entire program.
  //  Light LED2 for 1 second, 11 seconds after the first time LED1 Lights.  
  //  Light LED 3 through 10 for 1 second each, in 1 LED increments; LED2, LED2 + LED3, LED2 + LED3 + LED4  etc.
  //  Blink LED3 through 10 for 1 second.
  //  Light LED 3 through 10 for 1 second.
  //  Start step 3 again
    

// 1st: declare LED's as variables
// 2nd: assign LED's to pins and set as outputs
// 3rd: use digitalWrite and delay to write code.







 // Declare Variables

int LED1  = 1;        // digital pin 1
int LED2  = 2;        // digital pin 2
int LED3  = 3;        // digital pin 3
int LED4  = 4;        // digital pin 4
int LED5  = 5;        // digital pin 5 
int LED6  = 6;        // digital pin 6 
int LED7  = 7;        // digital pin 7 
int LED8  = 8;        // digital pin 8 
int LED9  = 9;       // digital pin 9 
int LED10 = 10;       // digital pin 10



void setup()                   // the setup function runs once when you press reset or power the board
{
 
 pinMode(LED1, OUTPUT);       // set Led's as outputs
 pinMode(LED2, OUTPUT);
 pinMode(LED3, OUTPUT);
 pinMode(LED4, OUTPUT);
 pinMode(LED5, OUTPUT);
 pinMode(LED6, OUTPUT);
 pinMode(LED7, OUTPUT);
 pinMode(LED8, OUTPUT);
 pinMode(LED9, OUTPUT);
 pinMode(LED10, OUTPUT);
}


void loop() 
{

digitalWrite(2, HIGH);      // Led 1 on for 1 second
 delay(1000);
digitalWrite(2, LOW);       // Led 1 off for 1 second
 delay(1000);
 
digitalWrite(2, HIGH);      // repeat 
 delay(1000);
digitalWrite(2, LOW);       
 delay(1000);
 
digitalWrite(2, HIGH);      // repeat 
 delay(1000);
digitalWrite(2, LOW);       
 delay(1000);
 
digitalWrite(2, HIGH);      // repeat 
 delay(1000);
digitalWrite(2, LOW);       
 delay(1000);
 
digitalWrite(2, HIGH);      // repeat 
 delay(1000);
digitalWrite(2, LOW);       
 delay(1000);
 
digitalWrite(2, HIGH);      // 11 seconds have past - about six led blinks 
 delay(1000);
digitalWrite(2, LOW);       
 delay(1000);              
 
 // Starts Led cascade
        
digitalWrite(2, HIGH);      // Led 1 on (keeps Led 1 blinking on and off)
digitalWrite(3, HIGH);      // turns Led 2 on and waits 1 second
 delay(1000);
 
digitalWrite(2, LOW);       // Led 1 off
digitalWrite(4, HIGH);      // turns Led 3 and waits for 1s
 delay(1000); 
 
digitalWrite(2, HIGH);      
digitalWrite(5, HIGH);      // turns Led 4 and waits for 1s
 delay(1000);
 
digitalWrite(2, LOW);       
digitalWrite(6, HIGH);      // turns Led 5 and waits for 1s
 delay(1000);
 
digitalWrite(2, HIGH);      
digitalWrite(7, HIGH);      // turns Led 6 and waits for 1s
 delay(1000);

digitalWrite(2, LOW); 
digitalWrite(8, HIGH);      // turns Led 7 and waits for 1s
 delay(1000);

digitalWrite(2, HIGH);  
digitalWrite(9, HIGH);      // turns Led 8 and waits for 1s
 delay(1000);
 
digitalWrite(2, LOW);   
digitalWrite(10, HIGH);      // turns Led 9 and waits for 1s
 delay(1000);
 
digitalWrite(2, HIGH);  
digitalWrite(11, HIGH);      // turns Led 10 and waits for 1s
 delay(1000);

 // all lights blink once 
 
digitalWrite(2, LOW);        // all Led's off
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
 delay(1000);
 
digitalWrite(2, HIGH);        // all Led's on
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
 delay(1000);
 
digitalWrite(2, LOW);          // all Led's off
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
 delay(1000);
 
 
 // Starts back at Led cascade
 // Does that three times, then program starts all over again
 
 
digitalWrite(2, HIGH); 
digitalWrite(3, HIGH);      
 delay(1000);
 
digitalWrite(2, LOW);   
digitalWrite(4, HIGH);      
 delay(1000); 
 
digitalWrite(2, HIGH);   
digitalWrite(5, HIGH);      
 delay(1000);
 
digitalWrite(2, LOW);  
digitalWrite(6, HIGH);      
 delay(1000);
 
digitalWrite(2, HIGH);   
digitalWrite(7, HIGH);      
 delay(1000);

digitalWrite(2, LOW); 
digitalWrite(8, HIGH);      
 delay(1000);

digitalWrite(2, HIGH);  
digitalWrite(9, HIGH);      
 delay(1000);
 
digitalWrite(2, LOW);   
digitalWrite(10, HIGH);      
 delay(1000);
 
digitalWrite(2, HIGH);  
digitalWrite(11, HIGH);      
 delay(1000);

 
digitalWrite(2, LOW);        
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
 delay(1000);
 
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
 delay(1000);
 
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
 delay(1000);
 
 // Starts back at Led cascade - 3rd time through  
   
digitalWrite(2, HIGH); 
digitalWrite(3, HIGH);     
 delay(1000);
 
digitalWrite(2, LOW);   
digitalWrite(4, HIGH);     
 delay(1000); 
 
digitalWrite(2, HIGH);   
digitalWrite(5, HIGH);      
 delay(1000);
 
digitalWrite(2, LOW);  
digitalWrite(6, HIGH);      
 delay(1000);
 
digitalWrite(2, HIGH);   
digitalWrite(7, HIGH);      

digitalWrite(2, LOW); 
digitalWrite(8, HIGH);      
 delay(1000);

digitalWrite(2, HIGH);  
digitalWrite(9, HIGH);      
 delay(1000);
 
digitalWrite(2, LOW);   
digitalWrite(10, HIGH);      
 delay(1000);
 
digitalWrite(2, HIGH);  
digitalWrite(11, HIGH);      
 delay(1000);

 
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
 delay(1000);
 
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
 delay(1000);
 
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
 delay(1000);
 
 // Starts back at Led cascade - 4th and final time through 
 
   digitalWrite(2, HIGH); 
digitalWrite(3, HIGH);      
 delay(1000);
 
digitalWrite(2, LOW);   
digitalWrite(4, HIGH);      
 delay(1000); 
 
digitalWrite(2, HIGH);   
digitalWrite(5, HIGH);     
 delay(1000);
 
digitalWrite(2, LOW);  
digitalWrite(6, HIGH);      
 delay(1000);
 
digitalWrite(2, HIGH);   
digitalWrite(7, HIGH);      
 delay(1000);

digitalWrite(2, LOW); 
digitalWrite(8, HIGH);      
 delay(1000);

digitalWrite(2, HIGH);  
digitalWrite(9, HIGH);      
 delay(1000);
 
digitalWrite(2, LOW);   
digitalWrite(10, HIGH);      
 delay(1000);
 
digitalWrite(2, HIGH);  
digitalWrite(11, HIGH);      
 delay(1000);

 
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
 delay(1000);
 
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
 delay(1000);
 
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
 delay(1000);
 
 // Goes back to the beginning of void loop and continues forever

I need help adding a push button to change the speed of the 10 Led pattern.

That is quite the most appalling code I have seen for some time. I blame copy and paste. You seem you be blissfully unaware of many things about writing a program.

  1. Do not use pin 1 as that and pin 0 are used for serial communications.
  2. There are such things as loops. That setup code initializing the pins to be outputs could be written.
for(int i=2; i<12; i++){
    pinMode(i,OUTPUT);
}

Correcting for not using pin 1 of course.

  1. There is no need to repeat lines of code you can use for loops, or if you have sections you want to repeat at various parts of your pattern you can define functions and call them when you need them.
    You code should be data driven, that is the patterns should be controlled or switched by using data stored in an array. Like a 1 might mean blink on and off one LED and a 2 might mean light one LED at a time in a Larson scanner like effect. Read the data and call the appropriate function.

Your big problem is that if you have a sequence that lasts 11 seconds and you use delays then you can only change things every 11 seconds unless you check for buttons and take action on them after every delay.

The real solution would be to use a state machine so you can generate a pattern and effectively check the button without ant delay.

See my
http://www.thebox.myzen.co.uk/Tutorial/State_Machine.html
Or Robin2's several things at once
http://forum.arduino.cc/index.php?topic=223286.0

Shame on you two... someone asks for help (he obviously needs it) and you rip his posting to shreds?

rickso234:
Shame on you two.

Was there some one else or do you mean too and not two?

I consider it helping to say what is wrong, if a lot is wrong there is a lot to say. I took time to outline what was wrong and links to help him improve, which in my opinion is a hell of a lot more useful that you have been.

Help does not mean doing things for people, here it means helping the, to learn.

I need help adding a push button to change the speed of the 10 Led pattern

I guess this means that you want to change the delay in the animations?

To start with, you need to hold the delay in a variable that you can change. Hard to modify a constant, by definition.

Secondly, it is difficult to handle user input when there are so many delays around the place, as either you have to sprinkle the same user checking code all over the place or you have to be satisfied with a very sluggish user interface.

So basically the structure of the code (cut and paste as it is) is not at all scalable and does not make it easy to do what you want.

You need to understand the technique used in the BlinkWithoutDelay example, to flash one LED. It would also simplify your programming if you used arrays for the pin numbers and the on/off times as the code can be very compact. You can then use a Finite State Machine structure per LED to manage all the timing and on/off parameter.

An example of this is my MultiBlink sketch (link to the libraries site below). Definitely not 'beginner' code and it does a lot more than you need right now, but it illustrates how your code could be structured.

Hello,

Thanks for all the info. As it may be apparent I am not a coder/programmer. Originally I was not going to incorporate a push button. I will read up on all the info given and restructure my code.

This code is intended to mimic the electric activity of the heart.I will attempt to have it run at a avg rate of a human heart, so i will be changing the speed and slow it down via push button to run 50x or 100x its actual rate.

Thanks for the links grumpy_mike, marco_c and the sympathy rickso234.