All submissions

Solving Approach

How do you plan to solve it?

 
 

 

 

 

Code

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;
}


 

 

 

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!