const int led1 = 12;
const int led2 = 13;
const int buttonPin = 14;
unsigned long previousMillis = 0;
const long interval = 500;
unsigned long lastDebounceTime = 0;
const long debounceDelay = 50;
int mode = 2;
int buttonState = HIGH;
int lastButtonState = HIGH;
bool led1State = LOW;
bool led2State = LOW;
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(115200);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
Serial.println("Waiting for first button press...");
}
void loop() {
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading == LOW && buttonState == HIGH) {
mode++;
if (mode > 2) {
mode = 0;
}
}
buttonState = reading;
}
lastButtonState = reading;
switch (mode) {
case 0:
blinkLED();
break;
case 1:
alternateLED();
break;
case 2:
turnOffLEDs();
break;
}
}
void blinkLED() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
led1State = !led1State;
led2State = led1State;
digitalWrite(led1, led1State);
digitalWrite(led2, led2State);
if (led1State == HIGH) {
Serial.print("Blinking On... ");
} else {
Serial.println("off");
}
}
}
void alternateLED() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
led1State = !led1State;
led2State = !led1State;
digitalWrite(led1, led2State);
digitalWrite(led2, led1State);
if (led1State == HIGH) {
Serial.print("Alternating on/off... ");
} else {
Serial.println("off/on");
}
}
}
void turnOffLEDs() {
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
}