All submissions

Solving Approach

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)

Code

/*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]();
                                                                                                                                                                                                                                          }

 

 

 

Output

Video

Add a video of the output (know more)

 

 

 

Submit Your Solution

Note: Once submitted, your solution goes public, helping others learn from your approach!