Launchpad blink with button
Is this what you are trying to accomplish?


Push-and-release => LED starts blinking
Push-and-release => LED turns off
and so forth ..


I slightly changed your code to accomplish that. I defined a flag 'blink' that tells the blink routine further down either to blink the LED or to turn it off.

const int buttonPin = PUSH2;     // the number of the pushbutton pin
const int ledPin =  GREEN_LED;   // the number of the LED pin

boolean state = HIGH;      // the current state of the output pin
boolean blink = LOW;       // the current mode of the LED either blinking (HIGH) or off (LOW)
int reading;           // the current reading from the input pin
int previous = LOW;    // the previous reading from the input pin

// the follow variables are long's because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long time = 0;         // the last time the output pin was toggled
long debounce = 200;   // the debounce time, increase if the output flickers

void setup()
{
  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT);
}

void loop()
{
  reading = digitalRead(buttonPin);

  // if the input just went from LOW and HIGH and we've waited long enough
  // to ignore any noise on the circuit, toggle the output pin and remember
  // the time
  if ( (reading == HIGH) &amp;&amp; (previous == LOW) &amp;&amp; ((millis() - time) &gt; debounce ) ) {
    blink = !blink;  // invert the current value for the blink flag
    time = millis();    
  }


  // if blink flag is HIGH then turn on and off the LED
  // if blink flag is LOW then turn off the LED
  if ( blink == HIGH ) {
    digitalWrite(ledPin, state);
    state = !state;   // invert the current state (LOW to HIGH and HIGH to LOW)
    delay(100);
  } else {
    digitalWrite(ledPin, LOW);
  }
  previous = reading;
}


The disadvantage of this code is that the loop runs slow due to the delay while blinking. The blinker loop can be improved for that behavior, but it introduces a slightly more complex mechanism:

  if ( blink == HIGH ) {
    state = ( millis() &gt;&gt; 8 ) &amp; 1;
    digitalWrite(ledPin, state);
  } else {
    digitalWrite(ledPin, LOW);
  }


Here the delay is replaced by making state depend on the number of milliseconds since start, divided by 256 and checking the least significant bit.