Eh, most likely you are using a rev1.5 Launchpad. The external pullup pin for the p1.3 button is not populated. Since it is not populated, there is no steady state change. You must enable the internal pullup.
Instead of pinMode(buttonPin);
use pinMode(buttonPin, INPUT_PULLUP);
Also, you are trying to read the wrong pin.
Instead of reading = digitalRead(ledPin);
use reading = digitalRead(buttonPin);
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) && (previous == LOW) && ((millis() - time) > 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() >> 8 ) & 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.
Best Answer
Energia has great tutorials at http://energia.nu/Guide_index.html
Mainly the Button Tutorial (use a pushbutton to control an LED.)
And the Button State Change Tutorial (counting the number of button pushes.)
A little modification of both will give you what you need.