#define btn1 2
#define btn2 3
#define btn3 4
#define ledPin 5
#define debounceDelay 300
#define blinkDelay 1000
enum lightMode {
off,
on,
blinking,
emergencyStop
};
lightMode state = off;
void setup() {
// put your setup code here, to run once:
pinMode(btn1, INPUT_PULLUP);
pinMode(btn2, INPUT_PULLUP);
pinMode(btn3, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
static unsigned long lastbtnPress = millis();
// put your main code here, to run repeatedly:
if (lastbtnPress + debounceDelay < millis()) {
if (!digitalRead(btn1) && state != emergencyStop) {
lastbtnPress = millis();
state = state +1;
if (state > 2) {
state = 0;
}
}
if (!digitalRead(btn2) && state != emergencyStop) {
lastbtnPress = millis();
state = state - 1;
if (state < 0) {
state = 2;
}
}
if (!digitalRead(btn3)) {
lastbtnPress = millis();
state = emergencyStop;
}
}
switch (state) {
case off:
digitalWrite(ledPin, LOW);
break;
case on:
digitalWrite(ledPin, HIGH);
break;
case blinking:
static unsigned long lastBlink = millis();
if (lastBlink + blinkDelay < millis()) {
digitalWrite(ledPin, !digitalRead(ledPin));
lastBlink = millis();
}
break;
case emergencyStop:
digitalWrite(ledPin, LOW);
break;
}
}