Making a program stop running when button isn't pressed...

I’m having difficulty (particularly since this is my first project) figuring this one out.

My goal for this project is that when the button is pressed, it goes through a series of flashes then stays on solid as long as the button is pressed.

I have a circuit set up almost exactly like the one in this tutorial:

Except that I’m using pin 13 to run a series of LEDs. My program is slightly different too, and I think that’s where the hangup is. I have added a series of blinks to the code for that project so that it looks like this:

/*
  Button

 Turns on and off a light emitting diode(LED) connected to digital
 pin 13, when pressing a pushbutton attached to pin 2.


 The circuit:
 * LED attached from pin 13 to ground
 * pushbutton attached to pin 2 from +5V
 * 10K resistor attached to pin 2 from ground

 * Note: on most Arduinos there is already an LED on the board
 attached to pin 13.


 created 2005
 by DojoDave <http://www.0j0.org>
 modified 30 Aug 2011
 by Tom Igoe

 This example code is in the public domain.

 http://www.arduino.cc/en/Tutorial/Button
 */

// constants won't change. They're used here to
// set pin numbers:
const int buttonPin = 2;     // the number of the pushbutton pin
const int ledPin =  13;      // the number of the LED pin

// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);
}

void loop() {
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH){
    // turn LED on:
    digitalWrite(ledPin, HIGH);
    delay(20); 
    digitalWrite(ledPin, LOW);
    delay(20);  
    digitalWrite(ledPin, HIGH);
    delay(20); 
    digitalWrite(ledPin, LOW);
    delay(20);
    digitalWrite(ledPin, HIGH);
    delay(20); 
    digitalWrite(ledPin, LOW);
    delay(200);
    digitalWrite(ledPin, HIGH);
    delay(20); 
    digitalWrite(ledPin, LOW);
    delay(20);  
    digitalWrite(ledPin, HIGH);
    delay(20); 
    digitalWrite(ledPin, LOW);
    delay(20);
    digitalWrite(ledPin, HIGH);
    delay(20); 
    digitalWrite(ledPin, LOW);
    delay(200);
    digitalWrite(ledPin, HIGH);
    delay(200); 
    digitalWrite(ledPin, LOW);
    delay(200);
    digitalWrite(ledPin, HIGH);
    delay(200); 
    digitalWrite(ledPin, LOW);
    delay(200);
    digitalWrite(ledPin, HIGH);
    delay(200); 
    digitalWrite(ledPin, LOW);
    delay(200);
    digitalWrite(ledPin, HIGH);
  } else {
    // turn LED off:
    digitalWrite(ledPin, LOW);
  }
}

That works…sort of. The problem is that I want the last “digitalWrite(ledPin, HIGH);” to keep the LED on as long as the button is pressed. However, it keeps looping through the code. I see why it’s doing that, but I’m trying to figure out how to make it stop on that last line and stay there as long as the button is pressed.

I’ve tried using combinations “break;” and “continue;” to no avail, probably because I don’t understand the required syntax. That which makes sense to me is obviously wrong, because it always fails.

Clumsy, but try inserting

while (digitalRead(buttonPin) == HIGH)
{
}

as the last 3 lines of the if clause.

When you get it working for goodness sake read up on for loops to do the repetitive stuff in your program

Check "while" command.

while(button pushed )
{
do something
}

UKHeliBob:
When you get it working for goodness sake read up on for loops to do the repetitive stuff in your program

I've literally been playing with Arduino for like 2 months around a full time job + father duties. I'm a physical learner, I learn by doing. I can't just read 10 paragraphs and be an expert. This is doubly true for anything involving code. It doesn't come as naturally to me as it does some, but that's not going to stop me from learning it. So forgive me for asking some stupid questions on the way.