How do you plan to solve it?
4 LEDs connected to pins 2, 3, 4, and 5 with current-limiting resistors
Push button connected to pin 7 with INPUT_PULLUP configuration
Button Handling:
Implements debouncing to prevent false triggers
Changes pattern on button press using modulo arithmetic to cycle through all patterns
Pattern System:
Uses function pointers to dynamically call the active pattern
Includes 5 distinct LED patterns with different behaviors
Custom patternDelay() function checks for button presses during delays
Patterns Included:
Pattern 1: All LEDs blink simultaneously
Pattern 2: Alternating LEDs
Pattern 3: Running light (single LED moving)
Pattern 4: Two LEDs at a time
Pattern 5: Knight Rider style (back and fort)
/*Paste your code here*/
const int led1 = 5;
const int led2 = 4;
const int led3 = 3;
const int led4 = 2;
const int PB = 7;
const int delayTime = 500;
const int totalPatterns = 5;
int currentPattern = 0;
int buttonPressed = 0;
int lastReading = HIGH;
int debouncedState = HIGH;
unsigned long lastDebounceTime = 0;
const unsigned long debounceDelay = 50;
bool checkButton() {
int reading = digitalRead(PB);
if (reading != lastReading) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != debouncedState) {
debouncedState = reading;
if (debouncedState == LOW) {
buttonPressed = 1;
lastReading = reading;
return true;
}
}
}
lastReading = reading;
return false;
}
bool delayWithButtonCheck(unsigned long ms) {
unsigned long start = millis();
while (millis() - start < ms) {
if (checkButton()) return true;
delay(8);
}
return false;
}
void pattern1() {
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
if (delayWithButtonCheck(delayTime)) return;
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
if (delayWithButtonCheck(delayTime)) return;
}
void pattern2() {
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
digitalWrite(led4, LOW);
if (delayWithButtonCheck(delayTime)) return;
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
digitalWrite(led3, LOW);
digitalWrite(led4, HIGH);
if (delayWithButtonCheck(delayTime)) return;
}
void pattern3() {
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
if (delayWithButtonCheck(delayTime)) return;
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
if (delayWithButtonCheck(delayTime)) return;
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
digitalWrite(led4, LOW);
if (delayWithButtonCheck(delayTime)) return;
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, HIGH);
if (delayWithButtonCheck(delayTime)) return;
}
void pattern4() {
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
if (delayWithButtonCheck(delayTime)) return;
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
if (delayWithButtonCheck(delayTime)) return;
}
void pattern5() {
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, HIGH);
if (delayWithButtonCheck(delayTime)) return;
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, LOW);
if (delayWithButtonCheck(delayTime)) return;
}
typedef void (*func_ptr)();
func_ptr pattern[totalPatterns] = {pattern1, pattern2, pattern3, pattern4, pattern5};
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(PB, INPUT_PULLUP);
}
void loop() {
checkButton();
if (buttonPressed) {
currentPattern = (currentPattern + 1) % totalPatterns;
buttonPressed = 0;
}
pattern[currentPattern]();
}
Add a video of the output (know more)