All submissions

Solving Approach

How do you plan to solve it?

 
 

 

 

 

Code



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


 

 

 

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!