How do you plan to solve it?
const int BUTTON_PIN = 2;
const int LED1 = 8, LED2 = 9, LED3 = 10, LED4 = 11;
int currentPattern = 1;
int totalPatterns = 5;
unsigned long lastButtonPress = 0;
const unsigned long debounceDelay = 300;
void setup() {
pinMode(BUTTON_PIN, INPUT);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
Serial.begin(9600);
Serial.println("Press button to change patterns");
Serial.println("Pattern 1: All LEDs Blink Together");
Serial.println("Pattern 2: LEDs 1&3 / 2&4 Alternate");
Serial.println("Pattern 3: Sequential Blinking");
Serial.println("Pattern 4: LEDs 1&2 / 3&4 Alternate");
Serial.println("Pattern 5: LEDs 2&3 / 1&4 Alternate");
Serial.println("==============================");
}
void loop() {
int buttonState = digitalRead(BUTTON_PIN);
if (buttonState == HIGH) {
if (millis() - lastButtonPress > debounceDelay) {
// Change to next pattern
currentPattern++;
if (currentPattern > totalPatterns) {
currentPattern = 1;
}
Serial.print("Pattern ");
Serial.print(currentPattern);
Serial.print(": ");
printPatternName(currentPattern);
lastButtonPress = millis();
}
}
switch(currentPattern) {
case 1:
patternAllBlinkTogether();
break;
case 2:
patternOddEvenAlternate();
break;
case 3:
patternSequentialBlink();
break;
case 4:
patternFirstLastPairs();
break;
case 5:
patternMiddleOuterAlternate();
break;
}
delay(10);
}
void printPatternName(int pattern) {
switch(pattern) {
case 1: Serial.println("All LEDs Blink Together"); break;
case 2: Serial.println("LEDs 1&3 / 2&4 Alternate"); break;
case 3: Serial.println("Sequential Blinking"); break;
case 4: Serial.println("LEDs 1&2 / 3&4 Alternate"); break;
case 5: Serial.println("LEDs 2&3 / 1&4 Alternate"); break;
}
}
void patternAllBlinkTogether() {
static unsigned long lastChange = 0;
static bool allState = false;
if (millis() - lastChange > 500) {
allState = !allState;
digitalWrite(LED1, allState);
digitalWrite(LED2, allState);
digitalWrite(LED3, allState);
digitalWrite(LED4, allState);
lastChange = millis();
}
}
void patternOddEvenAlternate() {
static unsigned long lastChange = 0;
static bool oddState = true;
if (millis() - lastChange > 600) {
oddState = !oddState;
if (oddState) {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, LOW);
} else {
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, LOW);
digitalWrite(LED4, HIGH);
}
lastChange = millis();
}
}
void patternSequentialBlink() {
static unsigned long lastChange = 0;
static int currentLED = 0;
if (millis() - lastChange > 300) {
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
switch(currentLED) {
case 0: digitalWrite(LED1, HIGH); break;
case 1: digitalWrite(LED2, HIGH); break;
case 2: digitalWrite(LED3, HIGH); break;
case 3: digitalWrite(LED4, HIGH); break;
}
currentLED = (currentLED + 1) % 4;
lastChange = millis();
}
}
void patternFirstLastPairs() {
static unsigned long lastChange = 0;
static bool firstPairState = true;
if (millis() - lastChange > 500) {
firstPairState = !firstPairState;
if (firstPairState) {
// LEDs 1 and 2 ON, LEDs 3 and 4 OFF
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
} else {
// LEDs 3 and 4 ON, LEDs 1 and 2 OFF
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, HIGH);
}
lastChange = millis();
}
}
void patternMiddleOuterAlternate() {
static unsigned long lastChange = 0;
static bool middleState = true;
if (millis() - lastChange > 550) {
middleState = !middleState;
if (middleState) {
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, LOW);
} else {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, HIGH);
}
lastChange = millis();
}
}
Add a video of the output (know more)