How do you plan to solve it?
const int buttonPin = 2;
const int led1 = 8;
const int led2 = 9;
const int led3 = 10;
const int led4 = 11;
const int ledPins[] = {led1, led2, led3, led4};
const int numLeds = 4;
int currentPattern = 1;
int patternState = 0;
int chaseIndex = 0;
long lastPatternChangeTime = 0;
const long patternInterval = 500;
int buttonState = 0;
int lastButtonState = 0;
long lastDebounceTime = 0;
long debounceDelay = 50;
void setup() {
Serial.begin(9600);
Serial.println("Starting Dynamic LED Patterns sketch...");
for (int i = 0; i < numLeds; i++) {
pinMode(ledPins[i], OUTPUT);
}
pinMode(buttonPin, INPUT);
}
void loop() {
handleButtonPress();
unsigned long currentMillis = millis();
if (currentMillis - lastPatternChangeTime >= patternInterval) {
lastPatternChangeTime = currentMillis;
switch (currentPattern) {
case 1:
digitalWrite(led1, !digitalRead(led1));
digitalWrite(led2, !digitalRead(led2));
digitalWrite(led3, !digitalRead(led3));
digitalWrite(led4, !digitalRead(led4));
break;
case 2:
patternState = !patternState;
if (patternState) {
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);
}
break;
case 3:
digitalWrite(ledPins[chaseIndex], LOW);
chaseIndex = (chaseIndex - 1 + numLeds) % numLeds;
digitalWrite(ledPins[chaseIndex], HIGH);
break;
case 4:
patternState = !patternState;
if (patternState) {
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
} else {
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
}
break;
case 5:
patternState = !patternState;
if (patternState) {
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, HIGH);
} else {
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, LOW);
}
break;
}
}
}
void handleButtonPress() {
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == HIGH) {
currentPattern++;
if (currentPattern > 5) {
currentPattern = 1;
}
Serial.print("New pattern selected: ");
Serial.println(currentPattern);
patternState = 0;
chaseIndex = 0;
for (int i = 0; i < numLeds; i++) {
digitalWrite(ledPins[i], LOW);
}
lastPatternChangeTime = millis();
}
}
}
lastButtonState = reading;
}
Add a video of the output (know more)