Leds to be turned off immediately when I turn off the switch

Hello, could anyone please help me with my code?
It's composed of 4 way switch and 8 Leds, each switch has a pattern of led lighting. What I really need is for leds to be also immediately turned off when the switch is off, even if its respective pattern is still not finished running. Thank you

Here's my code:

int LED1 = 13;
int LED2 = 12;
int LED3 = 11;
int LED4 = 10;
int LED5 = 9;
int LED6 = 8;
int LED7 = 7;
int LED8 = 6;
int S1 = 5;
int S2 = 4;
int S3 = 3;
int S4 = 2;

int val = HIGH;

int oneSec = 1000;

void setup() {
// put your setup code here, to run once:
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
pinMode(LED6, OUTPUT);
pinMode(LED7, OUTPUT);
pinMode(LED8, OUTPUT);

pinMode(S1, INPUT);
pinMode(S2, INPUT);
pinMode(S3, INPUT);
pinMode(S4, INPUT);

}

void loop() {
// put your main code here, to run repeatedly:

if (val=digitalRead(S1)) {

digitalWrite(LED1, HIGH);//First row
delay(oneSec);
digitalWrite(LED2, HIGH);//Secondo row
delay(oneSec);
digitalWrite(LED1, LOW);
digitalWrite(LED3, HIGH);//Third row
delay(oneSec);
digitalWrite(LED2, LOW);
digitalWrite(LED4, HIGH);//Fourth row
delay(oneSec);
digitalWrite(LED3, LOW);//FIFTH
digitalWrite(LED5, HIGH);//FIFTH
delay(oneSec);
digitalWrite(LED4, LOW);//SIXTH
digitalWrite(LED6, HIGH);//SIXTH
delay(oneSec);
digitalWrite(LED5, LOW);//SEVENTH
digitalWrite(LED7, HIGH);//SEVENTH
delay(oneSec);
digitalWrite(LED6, LOW);//EIGHTH
digitalWrite(LED8, HIGH);//EIGHTH
delay(oneSec);
digitalWrite(LED7, LOW);//NINETH
delay(oneSec);
digitalWrite(LED8, LOW);
}
else{
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED6, LOW);
digitalWrite(LED7, LOW);
digitalWrite(LED8, LOW);
}
if (val = digitalRead(S2)) {
digitalWrite(LED1, HIGH);
delay(oneSec);
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
delay(oneSec);
digitalWrite(LED2, LOW);
digitalWrite(LED1, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED1, HIGH);
digitalWrite(LED3, HIGH);
delay(oneSec);
digitalWrite(LED1, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED2, HIGH);
digitalWrite(LED4, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED4, HIGH);
delay(oneSec);
digitalWrite(LED2, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED3, HIGH);
digitalWrite(LED5, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED5, HIGH);
delay(oneSec);
digitalWrite(LED3, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED4, HIGH);
digitalWrite(LED6, HIGH);
digitalWrite(LED4, HIGH);
digitalWrite(LED6, HIGH);
delay(oneSec);
digitalWrite(LED4, LOW);
digitalWrite(LED6, LOW);
digitalWrite(LED5, HIGH);
digitalWrite(LED7, HIGH);
digitalWrite(LED5, HIGH);
digitalWrite(LED7, HIGH);
delay(oneSec);
digitalWrite(LED5, LOW);
digitalWrite(LED7, LOW);
digitalWrite(LED6, HIGH);
digitalWrite(LED8, HIGH);
digitalWrite(LED6, HIGH);
digitalWrite(LED8, HIGH);
delay(oneSec);
digitalWrite(LED6, LOW);
digitalWrite(LED8, LOW);
digitalWrite(LED7, HIGH);
delay(oneSec);
digitalWrite(LED7, LOW);
digitalWrite(LED8, HIGH);
delay(oneSec);
digitalWrite(LED8, LOW);
} else{
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED6, LOW);
digitalWrite(LED7, LOW);
digitalWrite(LED8, LOW);
}

if (val = digitalRead(S3)) {
    digitalWrite(LED1, HIGH);

delay(oneSec);
digitalWrite(LED1, LOW);//1st row
digitalWrite(LED2, HIGH);
delay(oneSec);
digitalWrite(LED2, LOW);//2nd row
digitalWrite(LED3, HIGH);
delay(oneSec);
digitalWrite(LED3, LOW);//3rd row
digitalWrite(LED4, HIGH);
delay(oneSec);
digitalWrite(LED4, LOW);//4th row
digitalWrite(LED5, HIGH);
delay(oneSec);
digitalWrite(LED5, LOW);//5th row
digitalWrite(LED6, HIGH);
delay(oneSec);
digitalWrite(LED6, LOW);//6th row
digitalWrite(LED7, HIGH);
delay(oneSec);
digitalWrite(LED7, LOW);//7th row
digitalWrite(LED8, HIGH);
delay(oneSec);
digitalWrite(LED8, LOW);//8th row
digitalWrite(LED7, HIGH);
delay(oneSec);
digitalWrite(LED7, LOW);//9th row
digitalWrite(LED6, HIGH);
delay(oneSec);
digitalWrite(LED6, LOW);//10th row
digitalWrite(LED5, HIGH);
delay(oneSec);
digitalWrite(LED5, LOW);//11th row
digitalWrite(LED4, HIGH);
delay(oneSec);
digitalWrite(LED4, LOW);//12th row
digitalWrite(LED3, HIGH);
delay(oneSec);
digitalWrite(LED3, LOW);//13th row
digitalWrite(LED2, HIGH);
delay(oneSec);
digitalWrite(LED2, LOW);//14th row
digitalWrite(LED1, HIGH);//15th row
delay(oneSec);
} else{
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED6, LOW);
digitalWrite(LED7, LOW);
digitalWrite(LED8, LOW);
}

if (val = digitalRead(S4)) {

digitalWrite(LED1, HIGH);
delay(oneSec);
digitalWrite(LED2, HIGH);
delay(oneSec);
digitalWrite(LED3, HIGH);
delay(oneSec);
digitalWrite(LED4, HIGH);
delay(oneSec);
digitalWrite(LED5, HIGH);
delay(oneSec);
digitalWrite(LED6, HIGH);
delay(oneSec);
digitalWrite(LED7, HIGH);
delay(oneSec);
digitalWrite(LED8, HIGH);
delay(oneSec);
digitalWrite(LED8, LOW);
delay(oneSec);
digitalWrite(LED7, LOW);
delay(oneSec);
digitalWrite(LED6, LOW);
delay(oneSec);
digitalWrite(LED5, LOW);
delay(oneSec);
digitalWrite(LED4, LOW);
delay(oneSec);
digitalWrite(LED3, LOW);
delay(oneSec);
digitalWrite(LED2, LOW);
delay(oneSec);
} else{
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED6, LOW);
digitalWrite(LED7, LOW);
digitalWrite(LED8, LOW);
}
}

Hello, could anyone please help me with my code?
It's composed of 4 way switch and 8 Leds, each switch has a pattern of led lighting. What I really need is for leds to be also immediately turned off when the switch is off, even if its respective pattern is still not finished running. Thank you

Here's my code:

int LED1 = 13;
int LED2 = 12;
int LED3 = 11;
int LED4 = 10;
int LED5 = 9;
int LED6 = 8;
int LED7 = 7;
int LED8 = 6;
int S1 = 5;
int S2 = 4;
int S3 = 3;
int S4 = 2;

int val = HIGH;

int oneSec = 1000;



void setup() {
  // put your setup code here, to run once:
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
pinMode(LED6, OUTPUT);
pinMode(LED7, OUTPUT);
pinMode(LED8, OUTPUT);
    
 pinMode(S1, INPUT);
 pinMode(S2, INPUT);
 pinMode(S3, INPUT);
 pinMode(S4, INPUT);
    
}

void loop() {
  // put your main code here, to run repeatedly:
    
 
 
    
    if (val=digitalRead(S1)) {
digitalWrite(LED1, HIGH);//First row
  delay(oneSec);
  digitalWrite(LED2, HIGH);//Secondo row
  delay(oneSec);
  digitalWrite(LED1, LOW);
  digitalWrite(LED3, HIGH);//Third row
  delay(oneSec);
  digitalWrite(LED2, LOW);
  digitalWrite(LED4, HIGH);//Fourth row
  delay(oneSec);
  digitalWrite(LED3, LOW);//FIFTH
  digitalWrite(LED5, HIGH);//FIFTH
  delay(oneSec);
  digitalWrite(LED4, LOW);//SIXTH
  digitalWrite(LED6, HIGH);//SIXTH
  delay(oneSec);
  digitalWrite(LED5, LOW);//SEVENTH
  digitalWrite(LED7, HIGH);//SEVENTH
  delay(oneSec);
  digitalWrite(LED6, LOW);//EIGHTH
   digitalWrite(LED8, HIGH);//EIGHTH
  delay(oneSec);
  digitalWrite(LED7, LOW);//NINETH
  delay(oneSec);
  digitalWrite(LED8, LOW);
} 
        else{
        digitalWrite(LED1, LOW);
        digitalWrite(LED2, LOW);
        digitalWrite(LED3, LOW);
        digitalWrite(LED4, LOW);
        digitalWrite(LED5, LOW);
        digitalWrite(LED6, LOW);
        digitalWrite(LED7, LOW);
        digitalWrite(LED8, LOW);
       }
     if (val = digitalRead(S2)) {
digitalWrite(LED1, HIGH);
delay(oneSec);
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
delay(oneSec);
digitalWrite(LED2, LOW);
digitalWrite(LED1, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED1, HIGH);
digitalWrite(LED3, HIGH);
delay(oneSec);
digitalWrite(LED1, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED2, HIGH);
digitalWrite(LED4, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED4, HIGH);
delay(oneSec);
digitalWrite(LED2, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED3, HIGH);
digitalWrite(LED5, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED5, HIGH);
delay(oneSec);
digitalWrite(LED3, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED4, HIGH);
digitalWrite(LED6, HIGH);
digitalWrite(LED4, HIGH);
digitalWrite(LED6, HIGH);
delay(oneSec);
digitalWrite(LED4, LOW);
digitalWrite(LED6, LOW);
digitalWrite(LED5, HIGH);
digitalWrite(LED7, HIGH);
digitalWrite(LED5, HIGH);
digitalWrite(LED7, HIGH);
delay(oneSec);
digitalWrite(LED5, LOW);
digitalWrite(LED7, LOW);
digitalWrite(LED6, HIGH);
digitalWrite(LED8, HIGH);
digitalWrite(LED6, HIGH);
digitalWrite(LED8, HIGH);
delay(oneSec);
digitalWrite(LED6, LOW);
digitalWrite(LED8, LOW);
digitalWrite(LED7, HIGH);
delay(oneSec);
digitalWrite(LED7, LOW);
digitalWrite(LED8, HIGH);
delay(oneSec);
digitalWrite(LED8, LOW);
  } else{
        digitalWrite(LED1, LOW);
        digitalWrite(LED2, LOW);
        digitalWrite(LED3, LOW);
        digitalWrite(LED4, LOW);
        digitalWrite(LED5, LOW);
        digitalWrite(LED6, LOW);
        digitalWrite(LED7, LOW);
        digitalWrite(LED8, LOW);
 }
    
  
    if (val = digitalRead(S3)) {
        digitalWrite(LED1, HIGH);
delay(oneSec);
digitalWrite(LED1, LOW);//1st row
digitalWrite(LED2, HIGH);
delay(oneSec);
digitalWrite(LED2, LOW);//2nd row
digitalWrite(LED3, HIGH);
delay(oneSec);
digitalWrite(LED3, LOW);//3rd row
digitalWrite(LED4, HIGH);
delay(oneSec);
digitalWrite(LED4, LOW);//4th row
digitalWrite(LED5, HIGH);
delay(oneSec);
digitalWrite(LED5, LOW);//5th row
digitalWrite(LED6, HIGH);
delay(oneSec);
digitalWrite(LED6, LOW);//6th row
digitalWrite(LED7, HIGH);
delay(oneSec);
digitalWrite(LED7, LOW);//7th row
digitalWrite(LED8, HIGH);
delay(oneSec);
digitalWrite(LED8, LOW);//8th row
digitalWrite(LED7, HIGH);
delay(oneSec);
digitalWrite(LED7, LOW);//9th row
digitalWrite(LED6, HIGH);
delay(oneSec);
digitalWrite(LED6, LOW);//10th row
digitalWrite(LED5, HIGH);
delay(oneSec);
digitalWrite(LED5, LOW);//11th row
digitalWrite(LED4, HIGH);
delay(oneSec);
digitalWrite(LED4, LOW);//12th row
digitalWrite(LED3, HIGH);
delay(oneSec);
digitalWrite(LED3, LOW);//13th row
digitalWrite(LED2, HIGH);
delay(oneSec);
digitalWrite(LED2, LOW);//14th row
digitalWrite(LED1, HIGH);//15th row
delay(oneSec);
} else{
        digitalWrite(LED1, LOW);
        digitalWrite(LED2, LOW);
        digitalWrite(LED3, LOW);
        digitalWrite(LED4, LOW);
        digitalWrite(LED5, LOW);
        digitalWrite(LED6, LOW);
        digitalWrite(LED7, LOW);
        digitalWrite(LED8, LOW);
 }
    
    if (val = digitalRead(S4)) {
 digitalWrite(LED1, HIGH);
delay(oneSec);
digitalWrite(LED2, HIGH);
delay(oneSec);
digitalWrite(LED3, HIGH);
delay(oneSec);
digitalWrite(LED4, HIGH);
delay(oneSec);
digitalWrite(LED5, HIGH);
delay(oneSec);
digitalWrite(LED6, HIGH);
delay(oneSec);
digitalWrite(LED7, HIGH);
delay(oneSec);
digitalWrite(LED8, HIGH);
delay(oneSec);
digitalWrite(LED8, LOW);
delay(oneSec);
digitalWrite(LED7, LOW);
delay(oneSec);
digitalWrite(LED6, LOW);
delay(oneSec);
digitalWrite(LED5, LOW);
delay(oneSec);
digitalWrite(LED4, LOW);
delay(oneSec);
digitalWrite(LED3, LOW);
delay(oneSec);
digitalWrite(LED2, LOW);
delay(oneSec);
} else{
       digitalWrite(LED1, LOW);
        digitalWrite(LED2, LOW);
        digitalWrite(LED3, LOW);
        digitalWrite(LED4, LOW);
        digitalWrite(LED5, LOW);
        digitalWrite(LED6, LOW);
        digitalWrite(LED7, LOW);
        digitalWrite(LED8, LOW);
}
 }
    

Hi @schwarz046 ,

Welcome to the forum..
The delay() function is what is jamming you up, it stops all execution until it finishes..
Need to rewrite sketch using non-blocking delays and a state machine for the leds..
Using arrays will make coding a bit easier and less..

let me know if you need more help..

god luck.. ~q

Hi @schwarz046 , Please don't crosspost.

https://forum.arduino.cc/t/leds-to-be-turned-off-immediately-when-i-turn-off-the-switch/1186794/1

I'm new to arduino and kind of lost in what you just said, could you please make a sample code for that for me to use as reference? Thank you

Welcome to the forum

Your topic has been moved to the Programming category of the forum

Please follow the advice given in the link below when posting code, in particular the section entitled 'Posting code and common code problems'

Use code tags (the < CODE/ > icon above the compose window) to make it easier to read and copy for examination

https://forum.arduino.cc/t/how-to-get-the-best-out-of-this-forum

I have never used 4 way switches, but what i might try is wiring the switches into the lights. Is there a way that the switches can turn of the lights without the arduino even knowing? Could you also post your wiring?

those delays are killing you...

you need to change the structure of the code and get rid of the delays

For extra information and examples look at

1 Like

You probably want to use a test for equality '==' rather than an assignment '=' in logical tests like that.

And you need to rewrite your sketch so it does not rely on delay() for timing. When those sequences using delay begin, there is nothing checking the switches or doing anything else.

Get comfy and google

  blink without delay Arduino

And

  Arduino two things at once

And

  Arduino finite state machine

And

  Arduino finite state machine traffic lights

HTH

a7

This requires to use non-blocking timing. And this means writing code without a single delay().
Each and every delay() must be replaced by non-blocking timing.

Are you ready for thinking totally different about how to do waiting ?
If not. The only way would be to open a switch in the GND-wire to interrupt the electric current.
Though switching on would still only be possible after finishing your existing code with all its delay()'s

Here you can learn about non-blocking timing

best regards Stefan

I took a different approach.

  • fixed your comparisons,
  • extracted duplicate codes,
  • extracted each action,
    in order to show you where your logic falls down. What the others have pointed to is correct, you need to get rid of delays() to address your immediate need, but your logic is also incorrect.
    Look at the if..else structures. If any button is not pressed, your logic will clear the LEDs, regardless of the actions of the other buttons. Of course, in the next pass of the loop, the LEDs are turned on again, so it might seem like 'it's doing what it should', but an oscilloscope on the LED outputs will show you things your eyes can't see.
    613732 3675 6702
void loop() {
  if (val == digitalRead(S1)) {
    pattern1();
  }    else {
    clearall();
  }
  if (val == digitalRead(S2)) {
    pattern2();
  } else {
    clearall();
  }
  if (val == digitalRead(S3)) {
    pattern3();
  } else {
    clearall();
  }
  if (val == digitalRead(S4)) {
    pattern4();
  } else {
    clearall();
  }
}

Hi @schwarz046 ,

not sure which post to reply too.. :slight_smile:
give this a go..


#define LED1  13
#define LED2  12
#define LED3  11
#define LED4  10
#define LED5  9
#define LED6  8
#define LED7  7
#define LED8  6


const byte leds[] = {LED1, LED2, LED3, LED4, LED5, LED6, LED7, LED8};
const byte buttons[] = {5, 4, 3, 2};
byte lastButtons[] = {1, 1, 1, 1};
unsigned long lastReads[] = {0, 0, 0, 0};

byte currentState = 0;
byte currentStep = 0;

unsigned long lastStep = 0;
unsigned long stepDelay = 1000ul;


void setup() {
  // put your setup code here, to run once:

  for (int i = 0; i < sizeof(leds); i++) {
    pinMode(leds[i], OUTPUT);
  }
  for (int i = 0; i < sizeof (buttons); i++) {
    pinMode(buttons[i], INPUT_PULLUP);
  }

}

void loop() {
  // put your main code here, to run repeatedly:

  //what time is it now..
  unsigned long now  = millis();

  for ( int i = 0; i < sizeof(buttons); i++) {
    if (now - lastReads[i] >= 50) {
      byte btn = digitalRead(buttons[i]);
      if (btn != lastButtons[i]) {
        lastReads[i] = now; //start debouncing..
        lastButtons[i] = btn;
        if (btn == LOW) {
          currentState = i + 1;
          currentStep = 0;
          AllOff();
        }
      }
    }
  }

  switch (currentState) {
    case 0: AllOff(); break;
    case 1: {
        switch (currentStep) {
          case 0: digitalWrite(LED1, HIGH); lastStep = now; currentStep++; break;
          case 1: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 2: digitalWrite(LED2, HIGH); lastStep = now; currentStep++; break;
          case 3: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 4: digitalWrite(LED1, LOW);
            digitalWrite(LED3, HIGH);//Third row
            lastStep = now; currentStep++; break;
          case 5: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 6: digitalWrite(LED2, LOW);
            digitalWrite(LED4, HIGH);//Fourth row
            lastStep = now; currentStep++; break;
          case 7: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 8: digitalWrite(LED3, LOW);
            digitalWrite(LED5, HIGH);//Fourth row
            lastStep = now; currentStep++; break;
          case 9: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 10: digitalWrite(LED4, LOW);
            digitalWrite(LED6, HIGH);//Fourth row
            lastStep = now; currentStep++; break;
          case 11: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 12: digitalWrite(LED5, LOW);
            digitalWrite(LED7, HIGH);//Fourth row
            lastStep = now; currentStep++; break;
          case 13: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 14: digitalWrite(LED6, LOW);
            digitalWrite(LED8, HIGH);//Fourth row
            lastStep = now; currentStep++; break;
          case 15: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 16: digitalWrite(LED7, LOW); lastStep = now; currentStep++; break;
          case 17: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 18: digitalWrite(LED7, LOW); currentStep++; break;
          case 19: AllOff(); currentStep++; break;
        }
      } break;
    case 2: {
        switch (currentStep) {
          case 0: digitalWrite(LED1, HIGH); lastStep = now; currentStep++; break;
          case 1: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 2: digitalWrite(LED1, LOW);
            digitalWrite(LED2, HIGH);//Third row
            lastStep = now; currentStep++; break;
          case 3: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 4: digitalWrite(LED2, LOW);
            digitalWrite(LED1, HIGH);//Third row
            digitalWrite(LED3, HIGH);//Third row
            lastStep = now; currentStep++; break;
          case 5: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 6: digitalWrite(LED1, LOW);
            digitalWrite(LED3, LOW);//Third row
            digitalWrite(LED2, HIGH);//Third row
            digitalWrite(LED4, HIGH);//Third row
            lastStep = now; currentStep++; break;
          case 7: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 8: digitalWrite(LED2, LOW);
            digitalWrite(LED4, LOW);//Third row
            digitalWrite(LED3, HIGH);//Third row
            digitalWrite(LED4, HIGH);//Third row
            lastStep = now; currentStep++; break;
          case 9: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 10: digitalWrite(LED3, LOW);
            digitalWrite(LED5, LOW);//Third row
            digitalWrite(LED4, HIGH);//Third row
            digitalWrite(LED6, HIGH);//Third row
            lastStep = now; currentStep++; break;
          case 11: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 12: digitalWrite(LED4, LOW);
            digitalWrite(LED6, LOW);//Third row
            digitalWrite(LED5, HIGH);//Third row
            digitalWrite(LED7, HIGH);//Third row
            lastStep = now; currentStep++; break;
          case 13: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 14: digitalWrite(LED5, LOW);
            digitalWrite(LED7, LOW);//Third row
            digitalWrite(LED6, HIGH);//Third row
            digitalWrite(LED8, HIGH);//Third row
            lastStep = now; currentStep++; break;
          case 15: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 16: digitalWrite(LED6, LOW);
            digitalWrite(LED8, LOW);//Third row
            digitalWrite(LED7, HIGH);//Third row
            lastStep = now; currentStep++; break;
          case 17: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 18: digitalWrite(LED7, LOW);
            digitalWrite(LED8, HIGH);//Third row
            lastStep = now; currentStep++; break;
          case 19: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 20: digitalWrite(LED8, LOW);
            lastStep = now; currentStep++; break;
          case 21: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 22: digitalWrite(LED8, LOW);
            currentStep++; break;
          case 23: AllOff(); currentStep++; break;
        }
      } break;
    case 3: {
        switch (currentStep) {
          case 0: digitalWrite(LED1, HIGH);
            lastStep = now; currentStep++; break;
          case 1: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 2: digitalWrite(LED1, LOW);
            digitalWrite(LED2, HIGH);
            lastStep = now; currentStep++; break;
          case 3: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 4: digitalWrite(LED2, LOW);
            digitalWrite(LED3, HIGH);
            lastStep = now; currentStep++; break;
          case 5: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 6: digitalWrite(LED3, LOW);
            digitalWrite(LED4, HIGH);
            lastStep = now; currentStep++; break;
          case 7: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 8: digitalWrite(LED4, LOW);
            digitalWrite(LED5, HIGH);
            lastStep = now; currentStep++; break;
          case 9: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 10: digitalWrite(LED5, LOW);
            digitalWrite(LED6, HIGH);
            lastStep = now; currentStep++; break;
          case 11: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 12: digitalWrite(LED6, LOW);
            digitalWrite(LED7, HIGH);
            lastStep = now; currentStep++; break;
          case 13: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 14: digitalWrite(LED7, LOW);
            digitalWrite(LED8, HIGH);
            lastStep = now; currentStep++; break;
          case 15: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 16: digitalWrite(LED8, LOW);
            digitalWrite(LED7, HIGH);
            lastStep = now; currentStep++; break;
          case 17: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 18: digitalWrite(LED7, LOW);
            digitalWrite(LED6, HIGH);
            lastStep = now; currentStep++; break;
          case 19: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 20: digitalWrite(LED6, LOW);
            digitalWrite(LED5, HIGH);
            lastStep = now; currentStep++; break;
          case 21: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 22: digitalWrite(LED5, LOW);
            digitalWrite(LED4, HIGH);
            lastStep = now; currentStep++; break;
          case 23: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 24: digitalWrite(LED4, LOW);
            digitalWrite(LED3, HIGH);
            lastStep = now; currentStep++; break;
          case 25: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 26: digitalWrite(LED3, LOW);
            digitalWrite(LED2, HIGH);
            lastStep = now; currentStep++; break;
          case 27: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 28: digitalWrite(LED2, LOW);
            digitalWrite(LED1, HIGH);
            lastStep = now; currentStep++; break;
          case 29: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 30: AllOff(); currentStep++; break;
        }
      } break;
    case 4: {
        switch (currentStep) {
          case 0: digitalWrite(LED1, HIGH);
            lastStep = now; currentStep++; break;
          case 1: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 2: digitalWrite(LED2, HIGH);
            lastStep = now; currentStep++; break;
          case 3: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 4: digitalWrite(LED3, HIGH);
            lastStep = now; currentStep++; break;
          case 5: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 6: digitalWrite(LED4, HIGH);
            lastStep = now; currentStep++; break;
          case 7: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 8: digitalWrite(LED5, HIGH);
            lastStep = now; currentStep++; break;
          case 9: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 10: digitalWrite(LED6, HIGH);
            lastStep = now; currentStep++; break;
          case 11: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 12: digitalWrite(LED7, HIGH);
            lastStep = now; currentStep++; break;
          case 13: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 14: digitalWrite(LED8, HIGH);
            lastStep = now; currentStep++; break;
          case 15: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 16: digitalWrite(LED8, LOW);
            lastStep = now; currentStep++; break;
          case 17: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 18: digitalWrite(LED7, LOW);
            lastStep = now; currentStep++; break;
          case 19: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 20: digitalWrite(LED6, LOW);
            lastStep = now; currentStep++; break;
          case 21: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 22: digitalWrite(LED5, LOW);
            lastStep = now; currentStep++; break;
          case 23: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 24: digitalWrite(LED4, LOW);
            lastStep = now; currentStep++; break;
          case 25: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 26: digitalWrite(LED3, LOW);
            lastStep = now; currentStep++; break;
          case 27: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 28: digitalWrite(LED2, LOW);
            lastStep = now; currentStep++; break;
          case 29: if (now - lastStep >= stepDelay) {
              currentStep++;
            } break;
          case 30: AllOff(); currentStep++; break;

        }
      } break;
  }




}

void AllOff() {
  for (int i = 0; i < sizeof(leds); i++) {
    digitalWrite(leds[i], LOW);
  }
}

have fun.. ~q

is there really no other way aside from using blink without delay? I've seen my peers use the "break;" command and it works for them

You can't insert a "break;" inside a delay()

You will have to use while-loops and additionally

  • check the state of all 4 switches inside the while-loop
  • so you can break; out of the while-loop()

best regards Stefan

when you need to wait, you could check the buttons

unsigned long t0 = millis();
bool needToExit = false;
while (millis() - t0 <= 1000) {
  if (digitalRead(buttonPin) == LOW) { // button is pressed, interrupt sequence
    needToExit = true;
    break;
  }
}
if (needToExit) return; // or whatever is needed to exit from current pattern

not fantastic but could be away to check the button status along the pattern execution...

int SW[4] = {2,3,4,5};
int LEDs[8] = {6,7,8,9,10,11,12,13};
int CurrentState=0;	



void setup()
{
  Serial.begin(9600);
  
  for(int x=0; x<4; x++)
  { 
   pinMode(SW[x], INPUT);
  }
  
  for (int x=0; x<8; x++)
  {
    pinMode(LEDs[x], OUTPUT);
 }
}

void loop()
{
  TurnOffAll();
  
   
  if (digitalRead(2)==HIGH && digitalRead(3)==LOW && digitalRead(4)==LOW && digitalRead(5)==LOW){
   
     Pattern1();
  }
  
  if (digitalRead(2)==LOW && digitalRead(3)==HIGH && digitalRead(4)==LOW && digitalRead(5)==LOW){
    
 Pattern2();
 }
 
 if (digitalRead(2)==LOW && digitalRead(3)==LOW && digitalRead(4)==HIGH && digitalRead(5)==LOW){
  
  Pattern3();
}
 
if (digitalRead(2)==LOW && digitalRead(3)==LOW && digitalRead(4)==LOW && digitalRead(5)==HIGH){

    Pattern4();
}
else
{
  TurnOffAll();
  }
  
Serial.println(digitalRead(2));
Serial.println(digitalRead(3));
Serial.println(digitalRead(4));
Serial.println(digitalRead(5));
Serial.println("================");



  //Serial.println(digitalRead(3));
 // Serial.println(digitalRead(4));
 // Serial.println(digitalRead(5));
 // Serial.println("=====================");
  
  
}

 void BlinkAll() {
   for (int x = 0; x <= 7; x++)
    {
     digitalWrite(LEDs[x], HIGH);
     delayMicroseconds(1000);
  }
 }

void TurnOffAll(){
    for (int x = 0; x <= 7; x++)
    {
      digitalWrite(LEDs[x], LOW);
    }
  }

void Pattern1()
  {
    for (int x = 0; x <= 8; x++)
    {
      digitalWrite(LEDs[x], HIGH);
      digitalWrite(LEDs[x-1], HIGH);
      delay(1000);
      if(digitalRead(2)==LOW)
      {
        break;
      }
      digitalWrite(LEDs[x-1], LOW);
      
   }
  }

void Pattern2()
  {
    for (int x = 0; x <= 9; x++)
    {
      digitalWrite(LEDs[x], HIGH);
      digitalWrite(LEDs[x-1], LOW);
      digitalWrite(LEDs[x-2], HIGH);
      delay(1000);
       if(digitalRead(3)==LOW)
      {
        break;
      }
      digitalWrite(LEDs[x-2], LOW);
    }
  }

void Pattern3()
{
 for(int x=0; x<=7; x++)
  {
    digitalWrite(LEDs[x], HIGH);
    delay(1000);
    digitalWrite(LEDs[x], LOW);
    if(digitalRead(4)==LOW)
      {
         break;
      }
  }
  for(int x=6; x>=0; x--)
  {
    digitalWrite(LEDs[x], HIGH);
    delay(1000);
    digitalWrite(LEDs[x], LOW);
    if(digitalRead(4)==LOW)
      {
        break;
      }
  }
}

void Pattern4()
{for(int x=0; x<=7; x++)
  {
    digitalWrite(LEDs[x], HIGH);
    delay(1000);
    if(digitalRead(5)==LOW)
      {
         break;
      }
  }
  for(int x=7; x>=0; x--)
  {
    digitalWrite(LEDs[x], LOW);
    delay(1000);
    if(digitalRead(5)==LOW)
      {
       break;
      }
  }
}

Above is the code of my peer. It gets the job done which is to immediately turn off all leds when no switch is turned on, and it happens to work when he integrated the "break" command in his code. It's too complex for me to understand but in what way can I also integrate "break" command in my code earlier?

You have a different idea if what immediate means. It looks like you are happy waiting as long as 1000 milliseconds for this "immediate" reaction.

So if that is immediate enough for your purposes, all done.

When that level of immediacy proves to be excruciatingly unacceptable, you'll need to turn to one of the several examples offered that demonstrate the ideas some of us are pushing towards you.

a7

Hi @schwarz046 ,

My example in a sim..

Uno Button Blink Leds..

good luck.. ~q

@qubits-us your example

it does not stop if the button is released

didn't realize that was a requirement..

sorry.. ~q