#define button 3 //Push button on D3
#define redLed 5 // redLed on D5
#define greenLed 6 // greenLed on D6
#define yellowLed 7 // yellowLed on D7
int state = 0; // integer to hold current state
int old_state = 0; // integer to hold old state
int button_state = 0; // integer to hold button state
void setup() {
pinMode(button, INPUT); // button set as input
pinMode(redLed, OUTPUT); // led's set as output
pinMode(greenLed, OUTPUT);
pinMode(yellowLed, OUTPUT);
digitalWrite(redLed, LOW); // set initial as off
digitalWrite(greenLed, LOW); // set initial as off
digitalWrite(yellowLed, LOW); // set initial as off
Serial.begin(115200);
}
void loop() {
// debouncing routine to read button
button_state = digitalRead(button); // read the state of button
if (button_state == 1) { // check of it has been pressed
delay(50); // wait 50 ms
button_state = digitalRead(button); // read the state of button again
if (button_state == 0) { // if it is 0 considered one press
state = old_state + 1;
Serial.println(state); // increase state by 1
}
}
else { // if button is not been pressed
delay(100); // wait 100 ms
}
switch (state) { // react to button state & pressed
case 1: // if state = 1
digitalWrite(redLed, HIGH); // set redLed on
digitalWrite(greenLed, LOW); // set greenLed off
digitalWrite(yellowLed, LOW); // set yellowLed off
old_state = state ; // set old state as current state
break;
case 2:
digitalWrite(redLed, LOW); // set redLed off
digitalWrite(greenLed, HIGH); // set greenLed on
digitalWrite(yellowLed, LOW); // set yellowLed off
old_state = state ; // set old state as current state
break;
case 3:
digitalWrite(redLed, LOW); // set redLed off
digitalWrite(greenLed, LOW); // set greenLed off
digitalWrite(yellowLed, HIGH); // set yellowLed on
old_state = state ; // set old state as current state
break;
default: // if state is not 1, 2, 3,
digitalWrite(redLed, LOW); // set redLed off
digitalWrite(greenLed, LOW); // set greenLed off
digitalWrite(yellowLed, LOW); // set yellowLed off
old_state = 0 ; // reset to 0
break;
}
}