Search code examples
arduino-unoarduino-ide

Glow LED in sequence Arduino c++


I want to build a circuit with 8 LEDs glow in sequence from left to right 3 at a time. I have written the code, but 3 LEDs are not working at all. Please let me know why is this.

tinkercad link:

https://www.tinkercad.com/things/365xyKIrEuI-copy-of-microcontrollerled-and-resistor/editel?sharecode=blB-NRxJIIaxMQ6i9CisG-G079o9UAT2xuvjDNJv2Z4

code:

    int ledpin[] = {
  5,
  6,
  7,
  8,
  9,
  10,
  11,
  12
};
int switchPinStatus = 0;
int delay1 = 50;

void setup() {
  pinMode(4, INPUT);
  for (int i = 0; i <= 7; i++)
    pinMode(ledpin[i], OUTPUT);

}

void sequence() {
  for (int i = 0; i <= 8; i++) {
    for (int j = i; j <= i + 2; j++) {
      analogWrite(ledpin[j], 100);
      delay(delay1);
    }
    analogWrite(ledpin[i], 0);
  }
  //for backwards
  for (int i = 7; i >= -1; i--) {
    for (int j = i; j >= i - 2; j--) {
      analogWrite(ledpin[j], 100);
      delay(delay1);
    }
    analogWrite(ledpin[i], 0);
  }
}

void loop() {
  switchPinStatus = digitalRead(4);
  while (switchPinStatus == 1) {
    for (int i = 0; i < 3; i++) {
      {
        sequence();
      }
      switchPinStatus = digitalRead(4);
    }
  }
}

Solution

  • This code turns each LED on in order and turns off the third one behind.

    int ledpin[] = {5,6,7,8,9,10,11,12};
    int delay1 = 100;
    
    void setup(){
      pinMode(4, INPUT);
        for(int i = 0; i <= 7; i++)
            pinMode(ledpin[i], OUTPUT);
            
    }
    
    void sequence(){
      for(int i=0;i <= 10;i++)
     {
        if(i <= 7){
         digitalWrite(ledpin[i],HIGH);
        }
        
        if(i >= 3){
         digitalWrite(ledpin[i-3], LOW);
        }
        
        delay(delay1);
     }
      
     //for backwards
      for(int i=7;i >= -3;i--)
     {
        if(i >= 0){
         digitalWrite(ledpin[i],HIGH);
        }
        
        if(i <= 4){
         digitalWrite(ledpin[i+3], LOW);
        }
        
        delay(delay1);
     }
    }
    
    void loop(){
       if(digitalRead(4) == 1){
          for (int i = 0; i < 3; i++) {
          {
            sequence();
          }
        }
      }
    }