const int flashButtonPin = 2;
const int turnOffButtonPin = 3;
const int ledPin = 13;
enum State {
BLINKING,
FLASHING,
OFF
};
State currentState = BLINKING;
unsigned long previousMillis = 0;
const long interval = 500;
bool ledState = LOW;
void setup() {
pinMode(flashButtonPin, INPUT_PULLUP); // Use internal pull-up
pinMode(turnOffButtonPin, INPUT_PULLUP); // Use internal pull-up
pinMode(ledPin, OUTPUT);
}
void loop() {
bool flashButtonPressed = !digitalRead(flashButtonPin);
bool turnOffButtonPressed = !digitalRead(turnOffButtonPin);
switch (currentState) {
case BLINKING:
if (flashButtonPressed) {
currentState = FLASHING;
} else if (turnOffButtonPressed) {
currentState = OFF;
} else {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
ledState = !ledState;
digitalWrite(ledPin, ledState);
}
}
break;
case FLASHING:
if (!flashButtonPressed) {
currentState = BLINKING;
ledState = LOW;
} else {
digitalWrite(ledPin, HIGH);
}
break;
case OFF:
if (!turnOffButtonPressed) {
currentState = BLINKING;
ledState = LOW;
} else {
digitalWrite(ledPin, LOW);
}
break;
}
}