Return; Start from the beginning of loop

In this code down below, I want the modes to return to the beginning as an endless loop when I press the button.

There's a gap between mode 1 and 5.
LED's turns off at the end of mode 5 and if I press again it's beginning from start which is mode 1 so I have write a #return code. How I could I do this?

const byte buttonPin = 2;
byte mode = 0;
const byte maxMode = 10;
byte currentState = LOW;
byte prevState = LOW;

void setup()
{
  Serial.begin(115200);
  pinMode(buttonPin, INPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  
}

void myDelay(unsigned long d) {
while (d > 0 && digitalRead(buttonPin) == currentState) {
delay(1);
d--;
}
}

void loop()
{
  currentState = digitalRead(buttonPin);
  if (currentState == LOW && prevState == HIGH)
  {
    mode++;
    if (mode > maxMode)
    {
      mode = 0;
    }
    Serial.println(mode);
  }
  prevState = currentState;
  switch (mode)
  {

case 0:
Serial.println();

digitalWrite(5, HIGH);
digitalWrite(7, HIGH);
digitalWrite(9, HIGH);
digitalWrite(11, HIGH);
myDelay(50);
digitalWrite(5, LOW);
digitalWrite(7, LOW);
digitalWrite(9, LOW);
digitalWrite(11, LOW);
myDelay(50);
digitalWrite(5, HIGH);
digitalWrite(7, HIGH);
digitalWrite(9, HIGH);
digitalWrite(11, HIGH);
myDelay(50);
digitalWrite(5, LOW);
digitalWrite(7, LOW);
digitalWrite(9, LOW);
digitalWrite(11, LOW);
myDelay(50);
digitalWrite(5, HIGH);
digitalWrite(7, HIGH);
digitalWrite(9, HIGH);
digitalWrite(11, HIGH);
myDelay(50);
digitalWrite(5, LOW);
digitalWrite(7, LOW);
digitalWrite(9, LOW);
digitalWrite(11, LOW);
myDelay(50);
digitalWrite(6, HIGH);
digitalWrite(8, HIGH);
digitalWrite(10, HIGH);
digitalWrite(12, HIGH);
myDelay(50);
digitalWrite(6, LOW);
digitalWrite(8, LOW);
digitalWrite(10, LOW);
digitalWrite(12, LOW);
myDelay(50);
digitalWrite(6, HIGH);
digitalWrite(8, HIGH);
digitalWrite(10, HIGH);
digitalWrite(12, HIGH);
myDelay(50);
digitalWrite(6, LOW);
digitalWrite(8, LOW);
digitalWrite(10, LOW);
digitalWrite(12, LOW);
myDelay(50);
digitalWrite(6, HIGH);
digitalWrite(8, HIGH);
digitalWrite(10, HIGH);
digitalWrite(12, HIGH);
myDelay(50);
digitalWrite(6, LOW);
digitalWrite(8, LOW);
digitalWrite(10, LOW);
digitalWrite(12, LOW);
myDelay(50);
break;

case 1:
Serial.println();

digitalWrite(5, HIGH);
myDelay(20);
digitalWrite(5, LOW);
myDelay(20);
digitalWrite(6, HIGH);
myDelay(20);
digitalWrite(6, LOW);
myDelay(20);
digitalWrite(7, HIGH);
myDelay(20);
digitalWrite(7, LOW);
myDelay(20);
digitalWrite(8, HIGH);
myDelay(20);
digitalWrite(8, LOW);
myDelay(20);
digitalWrite(9, HIGH);
myDelay(20);
digitalWrite(9, LOW);
myDelay(20);
digitalWrite(10, HIGH);
myDelay(20);
digitalWrite(10, LOW);
myDelay(20);
digitalWrite(11, HIGH);
myDelay(20);
digitalWrite(11, LOW);
myDelay(20);
digitalWrite(12, HIGH);
myDelay(20);
digitalWrite(12, LOW);
myDelay(20);
digitalWrite(11, HIGH);
myDelay(20);
digitalWrite(11, LOW);
myDelay(20);
digitalWrite(10, HIGH);
myDelay(20);
digitalWrite(10, LOW);
myDelay(20);
digitalWrite(9, HIGH);
myDelay(20);
digitalWrite(9, LOW);
myDelay(20);
digitalWrite(8, HIGH);
myDelay(20);
digitalWrite(8, LOW);
myDelay(20);
digitalWrite(7, HIGH);
myDelay(20);
digitalWrite(7, LOW);
myDelay(20);
digitalWrite(6, HIGH);
myDelay(20);
digitalWrite(6, LOW);
myDelay(20);
digitalWrite(5, HIGH);
myDelay(20);
digitalWrite(5, LOW);
myDelay(20);
break;

case 2:
Serial.println();

digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
myDelay(50);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
myDelay(50);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
myDelay(50);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
myDelay(50);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
myDelay(50);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
myDelay(50);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
myDelay(50);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
myDelay(50);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
myDelay(50);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
myDelay(50);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
myDelay(50);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
myDelay(50);
break;

case 3:
Serial.println();

digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
myDelay(40);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
myDelay(40);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
myDelay(40);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
myDelay(40);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
myDelay(40);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
myDelay(120);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
myDelay(40);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
myDelay(40);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
myDelay(40);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
myDelay(40);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
myDelay(40);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
myDelay(40);
break;

case 4:
Serial.println();

digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
myDelay(40);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
myDelay(40);
digitalWrite(7, HIGH);
digitalWrite(10, HIGH);
myDelay(40);
digitalWrite(7, LOW);
digitalWrite(10, LOW);
myDelay(40);
digitalWrite(6, HIGH);
digitalWrite(11, HIGH);
myDelay(40);
digitalWrite(6, LOW);
digitalWrite(11, LOW);
myDelay(40);
digitalWrite(5, HIGH);
digitalWrite(12, HIGH);
myDelay(40);
digitalWrite(5, LOW);
digitalWrite(12, LOW);
break;

}
}

You only have code for modes 0 to 4 but maxMode is set to 10 so there will be 5 modes where nothing happens

Is that what you meant to do ?

Pro tip:

  default :
    Serial.print(mode);
    Serial.println("  no code to handle this case!");

    break;

Always include a default case in you switch, so you can be alerted to this potential error - a case not handled.

HTH

a7

Nope, I noticed that mistake later and set it 5. Consider it 5.

I just need a piece of code part that start from beginning of loop. I try at the end of code return(void loop); but didn't work.

Try

return;

genious idea!!! but I have no idea where to put return;

You put that line where ever it makes sense to immediately exit the function.

You cannot just "make stuff up" and expect it to work. There are many, many on-line language tutorials that give examples of every imaginable feature of the programming language. Take advantage of them. Example

Finally, if you have a question about code, post ALL the code, using code tags, describe what you expected to happen, and what happened instead.

I'm already trying at the end of the program but doesn't work. I think I'm making a mistake.

Here it's. There is 7 different modes. If I press the button 8 times nothing happen because all LED's turn off! So this is undesirable. When I press the button for the 8th time, I want the program to return to the beginning.

const byte maxMode = 7;
byte currentState = LOW;
byte prevState = LOW;

void setup()
{
  Serial.begin(115200);
  pinMode(buttonPin, INPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  
}

void myDelay(unsigned long d) {
while (d > 0 && digitalRead(buttonPin) == currentState) {
delay(1);
d--;
}
}

void loop()
{
  currentState = digitalRead(buttonPin);
  if (currentState == LOW && prevState == HIGH)
  {
    mode++;
    if (mode > maxMode)
    {
      mode = 0;
    }
    Serial.println(mode);
  }
  prevState = currentState;
  switch (mode)
  {

case 0:
Serial.println();

digitalWrite(5, HIGH);
digitalWrite(7, HIGH);
digitalWrite(9, HIGH);
digitalWrite(11, HIGH);
myDelay(50);
digitalWrite(5, LOW);
digitalWrite(7, LOW);
digitalWrite(9, LOW);
digitalWrite(11, LOW);
myDelay(50);
digitalWrite(5, HIGH);
digitalWrite(7, HIGH);
digitalWrite(9, HIGH);
digitalWrite(11, HIGH);
myDelay(50);
digitalWrite(5, LOW);
digitalWrite(7, LOW);
digitalWrite(9, LOW);
digitalWrite(11, LOW);
myDelay(50);
digitalWrite(5, HIGH);
digitalWrite(7, HIGH);
digitalWrite(9, HIGH);
digitalWrite(11, HIGH);
myDelay(50);
digitalWrite(5, LOW);
digitalWrite(7, LOW);
digitalWrite(9, LOW);
digitalWrite(11, LOW);
myDelay(50);
digitalWrite(6, HIGH);
digitalWrite(8, HIGH);
digitalWrite(10, HIGH);
digitalWrite(12, HIGH);
myDelay(50);
digitalWrite(6, LOW);
digitalWrite(8, LOW);
digitalWrite(10, LOW);
digitalWrite(12, LOW);
myDelay(50);
digitalWrite(6, HIGH);
digitalWrite(8, HIGH);
digitalWrite(10, HIGH);
digitalWrite(12, HIGH);
myDelay(50);
digitalWrite(6, LOW);
digitalWrite(8, LOW);
digitalWrite(10, LOW);
digitalWrite(12, LOW);
myDelay(50);
digitalWrite(6, HIGH);
digitalWrite(8, HIGH);
digitalWrite(10, HIGH);
digitalWrite(12, HIGH);
myDelay(50);
digitalWrite(6, LOW);
digitalWrite(8, LOW);
digitalWrite(10, LOW);
digitalWrite(12, LOW);
myDelay(50);
break;

case 1:
Serial.println();

digitalWrite(11, HIGH);
digitalWrite(9, HIGH);
digitalWrite(7, HIGH);
digitalWrite(5, HIGH);
myDelay(50);
digitalWrite(11, LOW);
digitalWrite(9, LOW);
digitalWrite(7, LOW);
digitalWrite(5, LOW);
myDelay(50);
digitalWrite(11, HIGH);
digitalWrite(9, HIGH);
digitalWrite(7, HIGH);
digitalWrite(5, HIGH);
myDelay(50);
digitalWrite(11, LOW);
digitalWrite(9, LOW);
digitalWrite(7, LOW);
digitalWrite(5, LOW);
myDelay(50);
digitalWrite(11, HIGH);
digitalWrite(9, HIGH);
digitalWrite(7, HIGH);
digitalWrite(5, HIGH);
myDelay(50);
digitalWrite(11, LOW);
digitalWrite(9, LOW);
digitalWrite(7, LOW);
digitalWrite(5, LOW);
myDelay(50);
digitalWrite(12, HIGH);
digitalWrite(10, HIGH);
digitalWrite(6, HIGH);
digitalWrite(8, HIGH);
myDelay(50);
digitalWrite(12, LOW);
digitalWrite(10, LOW);
digitalWrite(6, LOW);
digitalWrite(8, LOW);
myDelay(50);
digitalWrite(12, HIGH);
digitalWrite(10, HIGH);
digitalWrite(6, HIGH);
digitalWrite(8, HIGH);
myDelay(50);
digitalWrite(12, LOW);
digitalWrite(10, LOW);
digitalWrite(6, LOW);
digitalWrite(8, LOW);
myDelay(50);
digitalWrite(12, HIGH);
digitalWrite(10, HIGH);
digitalWrite(6, HIGH);
digitalWrite(8, HIGH);
myDelay(50);
digitalWrite(12, LOW);
digitalWrite(10, LOW);
digitalWrite(6, LOW);
digitalWrite(8, LOW);
myDelay(50);
break;

case 2:
Serial.println();

digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
myDelay(50);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
myDelay(50);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
myDelay(50);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
myDelay(50);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
myDelay(50);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
myDelay(50);
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
myDelay(50);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
myDelay(50);
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
myDelay(50);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
myDelay(50);
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
myDelay(50);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
myDelay(50);
break;

case 3:
Serial.println();

digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
myDelay(40);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
myDelay(40);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
myDelay(40);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
myDelay(40);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
myDelay(40);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
myDelay(120);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
myDelay(40);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
myDelay(40);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
myDelay(40);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
myDelay(40);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
myDelay(40);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
myDelay(40);
break;

case 4:
Serial.println();

digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
myDelay(40);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
myDelay(40);
digitalWrite(7, HIGH);
digitalWrite(10, HIGH);
myDelay(40);
digitalWrite(7, LOW);
digitalWrite(10, LOW);
myDelay(40);
digitalWrite(6, HIGH);
digitalWrite(11, HIGH);
myDelay(40);
digitalWrite(6, LOW);
digitalWrite(11, LOW);
myDelay(40);
digitalWrite(5, HIGH);
digitalWrite(12, HIGH);
myDelay(40);
digitalWrite(5, LOW);
digitalWrite(12, LOW);
break;

case 5:
Serial.println();

digitalWrite(5, HIGH);
myDelay(20);
digitalWrite(5, LOW);
myDelay(20);
digitalWrite(6, HIGH);
myDelay(20);
digitalWrite(6, LOW);
myDelay(20);
digitalWrite(7, HIGH);
myDelay(20);
digitalWrite(7, LOW);
myDelay(20);
digitalWrite(8, HIGH);
myDelay(20);
digitalWrite(8, LOW);
myDelay(20);
digitalWrite(9, HIGH);
myDelay(20);
digitalWrite(9, LOW);
myDelay(20);
digitalWrite(10, HIGH);
myDelay(20);
digitalWrite(10, LOW);
myDelay(20);
digitalWrite(11, HIGH);
myDelay(20);
digitalWrite(11, LOW);
myDelay(20);
digitalWrite(12, HIGH);
myDelay(20);
digitalWrite(12, LOW);
myDelay(20);
digitalWrite(11, HIGH);
myDelay(20);
digitalWrite(11, LOW);
myDelay(20);
digitalWrite(10, HIGH);
myDelay(20);
digitalWrite(10, LOW);
myDelay(20);
digitalWrite(9, HIGH);
myDelay(20);
digitalWrite(9, LOW);
myDelay(20);
digitalWrite(8, HIGH);
myDelay(20);
digitalWrite(8, LOW);
myDelay(20);
digitalWrite(7, HIGH);
myDelay(20);
digitalWrite(7, LOW);
myDelay(20);
digitalWrite(6, HIGH);
myDelay(20);
digitalWrite(6, LOW);
myDelay(20);
digitalWrite(5, HIGH);
myDelay(20);
digitalWrite(5, LOW);
myDelay(20);
break;

case 6:
Serial.println();

digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
digitalWrite(7, HIGH);
myDelay(50);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
digitalWrite(7, LOW);
myDelay(50);
digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
digitalWrite(7, HIGH);
myDelay(50);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
digitalWrite(7, LOW);
myDelay(50);
digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
digitalWrite(7, HIGH);
myDelay(50);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
digitalWrite(7, LOW);
myDelay(50);
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
myDelay(50);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
myDelay(50);
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
myDelay(50);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
myDelay(50);
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
myDelay(50);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
myDelay(50);
break;
return;
}
}

Please explain what "return to the beginning" means to you.

Assuming that "mode" counts button pushes, this code seems to do at least part of what you want. It resets mode to be zero, if mode exceeds 7. What is its purpose, and why can't you use the result?

    mode++;
    if (mode > maxMode)
    {
      mode = 0;
    }

Hint: adding comments to the code helps you as well as others.

If you want that the programs returns to beginning without fulfilling the full cycle - you need to rewrite it in non-blocking mode without using the delays. You added reading the button to the custom delay code, but your code doing nothing except the aborting the last delay. If you try to avoid using the millis - I think this is a wrong way.

Hello arduinoacl

My advice after checking your sketch:

Take a view into some powerful C++ instructions like STRUCT, ENUM, ARRAY, CASE/SWITCH,UDT, RANGE-BASED-FOR-LOOP, etc.

This will help you to build non-blocking timers and to prevent code duplicates.

Have a nice day and enjoy coding in C++.

If you have myDelay() return a flag that says the button was pushed, you can then use that flag to skip the rest of the mode:

boolean myDelay(unsigned long d) 
{
  while (d > 0) 
  {
    if (digitalRead(buttonPin) != currentState)
      return true;
    delay(1);
    d--;
  }
  return false;
}

Then replace:
myDelay(X);
with
if (myDelay(X)) return;

And PLEASE read the sticky at the top of the forum about how to ask questions.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.