#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
int LED_RED = 6;
int LED_BLUE = 3;
int LED_YELLOW = 9;
int LED_GREEN = 5;
int BUTTON = 7;
int currentMode = 0;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 200;
void setup() {
lcd.init();
lcd.backlight();
pinMode(LED_RED, OUTPUT);
pinMode(LED_BLUE, OUTPUT);
pinMode(LED_YELLOW, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
pinMode(BUTTON, INPUT);
displayMode(currentMode);
}
void loop() {
int buttonState = digitalRead(BUTTON);
if (buttonState == HIGH && (millis() - lastDebounceTime) > debounceDelay) {
currentMode++;
if (currentMode > 2) {
currentMode = 0;
}
lastDebounceTime = millis();
displayMode(currentMode);
}
if (currentMode == 0) {
randomBlink();
} else if (currentMode == 1) {
sequentialBlink();
} else if (currentMode == 2) {
fadeBlink();
}
}
void displayMode(int mode) {
lcd.clear();
lcd.setCursor(0, 0);
if (mode == 0) {
lcd.print("Random Blink");
} else if (mode == 1) {
lcd.print("Sequential Blink");
} else if (mode == 2) {
lcd.print("Fade Blink");
}
}
void randomBlink() {
int randomLED = random(LED_RED, LED_GREEN + 1);
digitalWrite(randomLED, HIGH);
delay(200);
digitalWrite(randomLED, LOW);
delay(200);
}
void sequentialBlink() {
for (int i = LED_RED; i <= LED_GREEN; i++) {
digitalWrite(i, HIGH);
delay(200);
digitalWrite(i, LOW);
}
}
void fadeBlink() {
for (int i = LED_RED; i <= LED_GREEN; i++) {
for (int brightness = 0; brightness <= 255; brightness += 5) {
analogWrite(i, brightness);
delay(30);
}
for (int brightness = 255; brightness >= 0; brightness -= 5) {
analogWrite(i, brightness);
delay(30);
}
}
}