Delay ciclico (Solucionado)

Hola que tal hasta el dia de hoy no he podido entender bien la función de millis.

lo que quiero hacer es la siguiente:

Tarea 1
ejecutar x
espera 1000ms (quiero eliminar los delays)
ejecutar y
espera 1000ms
ejecutar Z

Tarea 2

Tarea 1
ejecutar x
espera 1000ms (quiero eliminar los delays)
ejecutar y
espera 1000ms
ejecutar Z

ya tengo mi programa y mis variables definidos, este es la parte del programa que quiero eliminar los delays por millis, ya que cuando hace la lectura del limitswitch a veces atraviesa por el delay, lo cual hace que pase de largo hasta que termine el delay y pueda leer el estado del switch ya presionado.

espero me puedan ayudar ejemplificandolo para poder enteder bien la funcion de millis que todos me han
recomendado usar.

estadoSW1= digitalRead (SW1);                   //Lectura del Switch de corte 1 y almacenamiento de su valor.
estadoActivacion= digitalRead (Activacion);     //Lectura del boton de Activacion y almacenamiento de su valor.
if (estadoInicial==HIGH)                        //Si el valor del estado inicial es igual a uno.
if(estadoSW1==HIGH){                            //Si el valor del Switch de corte 1 es igual a uno.
estadoSeguridadSW1 = 1 - estadoSeguridadSW1;    //Con la formula cambiamos el valor de 0 a 1 y de 1 a 0 cada que el boton es presionado.
delay (20);                                     //Eliminamos el rebote del boton con 20 Milisegundos.
}
estadoSW1 = estadoanteriorSW1;                 //Cambiamos el valor del estado del Switch de corte 1 de nuevo a cero. 
if (estadoSeguridadSW1==1){                    //Si el valor del estado estado de seguridad del Switch 1 es igual a uno.
digitalWrite (Arranque,LOW);                   //Se apaga la salida del relevador de arranque.
delay(200);                                    //Existe una pausa de 300 Milisegundos.
digitalWrite (Seguridad,LOW);                  //Se apaga la salida del relevador de seguridad.
delay(200);                                    //Existe una pausa de 300 Milisegundos.
digitalWrite (Cambio1,LOW);                     //Se apaga la salida del relevador de cambio. 
digitalWrite (Cambio2,LOW);                     //Se apaga la salida del relevador de cambio. 
delay(200);                                    //Existe una pausa de 300 Milisegundos.
digitalWrite (Seguridad,HIGH);                 //Se enciende la salida del relevador de seguridad.
delay(500);                                    //Existe una pausa de 500 Milisegundos.
digitalWrite (Arranque,HIGH);                  //Se enciende la salida del relevador de arranque.

estadoSeguridadSW1=0;
estadoSW2=0;
}

estadoSW2= digitalRead (SW2);                   //Lectura del Switch de corte 2 y almacenamiento de su valor.
estadoActivacion= digitalRead (Activacion);     //Lectura del boton de Activacion y almacenamiento de su valor.
if (estadoInicial==HIGH)                        //Si el valor del estado inicial es igual a uno.
if(estadoSW2==HIGH){                            //Si el valor del Switch de corte 2 es igual a uno.
estadoSeguridadSW2 = 1 - estadoSeguridadSW2;    //Con la formula cambiamos el valor de 0 a 1 y de 1 a 0 cada que el boton es presionado.
delay (20);                                     //Eliminamos el rebote del boton con 20 Milisegundos.
}
estadoSW2= estadoanteriorSW2;                   //Cambiamos el valor del estado del Switch de corte 2 de nuevo a cero. 
if (estadoSeguridadSW2==1){                     //Si el valor del estado estado de seguridad del Switch 1 es igual a uno.
digitalWrite (Arranque,LOW);                    //Se apaga la salida del relevador de arranque.
delay(200);                                     //Existe una pausa de 300 Milisegundos.
digitalWrite (Seguridad,LOW);                   //Se apaga la salida del relevador de seguridad.
delay(200);                                     //Existe una pausa de 300 Milisegundos.
digitalWrite (Cambio1,HIGH);                    //Se enciende la salida del relevador de cambio.
digitalWrite (Cambio2,HIGH);                    //Se enciende la salida del relevador de cambio.
delay(500);                                     //Existe una pausa de 500 Milisegundos.
digitalWrite (Seguridad,HIGH);                  //Se enciende la salida del relevador de seguridad.
delay(600);                                     //Existe una pausa de 500 Milisegundos.
digitalWrite (Arranque,HIGH);                   //Se enciende la salida del relevador de arranque.
estadoSeguridadSW2=0;
estadoSW1=0;
}

Debes entonces ir a Documentación y leer que es una máquina de estados.
Luego de entender el concepto de máquina de estados mira sobre el final un comentario que yo hago modificando un sketch parecido al tuyo

Me parece perfecto muchas gracias, en seguida lo reviso y público los resultados o la solución

SI lo haces enseguida te doy un premio!!

surbyte:
SI lo haces enseguida te doy un premio!!

He leido el articulo y he aprendido nuevas cosas, ahora vienen las nuevas dudas.

Espero puedas corregirme, ya que me encanta aprender y seguir experimentando.

Despues de definidas las variables, hago la lectura de mi boton

if (BotonEstado) 
      estado = 0;  // comienzo la maquina de estados
  else 
      estado = 5;  // no hago nada (aqui se pone toda la cantidad de tareas que queremos hacer)

Despues de eso empiezan los estados.

switch (estado) {
 case 0:
              digitalWrite (Arranque,LOW);
              estado = 1;
              break;
 case 1:   digitalWrite (Seguridad,LOW); 
              estado = 2; 
              break;

case 2:   digitalWrite (Cambio1,HIGH);                 
             digitalWrite (Cambio2,HIGH);
              estado = 3; 
              break;

case 3:   digitalWrite (Seguridad,HIGH);
              estado = 4; 
              break;

case 4:   digitalWrite (Arranque,HIGH);
              estado = 5; 
              break;
default:
              break;
  }

Esa seria toda la serie de instrucciones de un solo switch, estoy en lo correcto? para poder pasar la fase 2 =)

Gracias

ya lo pude resolver, realmente me abrio mucho el entendimiento surbyte el post que me sugeriste que leyera, le pique compile corregi volvi a compilar y todo lo respectivo y se me ocurrio que podia quedar de la siguiente manera, la cual me sirvio de maravilla.

}
void loop(){ 

estadoActivacion= digitalRead (Activacion);     //Lectura del boton de activacion y almacenamiento de su valor.
if(estadoActivacion==HIGH){                     //Si el boton de activacion es precionado
estadoInicial = 1 - estadoInicial;              //Con la formula cambiamos el valor de 0 a 1 y de 1 a 0 cada que el boton es presionado.
delay (20);                                     //Eliminamos el rebote del boton con 20 Milisegundos.
}
estadoActivacion = estadoanteriorActivacion;    //Cambiamos el valor del estado actual de la activacion de nuevo a cero.
if (estadoInicial==0){  
//Si el valor del estado  inicial es igual a cero.
digitalWrite (LedON,LOW);                       //Se apaga la salida del led.
digitalWrite (Arranque,LOW);                    //Se apaga la salida del relevador de arranque.
delay(200);                                     //Existe una pausa de 200 Milisegundos.
digitalWrite (Seguridad,LOW);                   //Se apaga la salida del relevador de seguridad.
delay(200);                                     //Existe una pausa de 200 Milisegundos.
digitalWrite (Cambio1,LOW);                      //Se apaga la salida del relevador de cambio.
digitalWrite (Cambio2,LOW);                      //Se apaga la salida del relevador de cambio.
estadoInicial=0;                                //Cambiamos el valor del estado actual del estado inicial de nuevo a cero.
}
else {                                          //Si el valor del estado  inicial no es igual a cero.
digitalWrite (LedON,HIGH);                      //Se enciende la salida del led (Colocar a futuro). 
digitalWrite (Seguridad,HIGH);                  //Se enciende la salida del relevador de seguridad.
delay(300);                                     //Existe una pausa de 300 Milisegundos.
digitalWrite (Arranque,HIGH);                   //Se enciende la salida del relevador de arranque.
}

estadoSW1= digitalRead (SW1);                   //Lectura del Switch de corte 1 y almacenamiento de su valor.
estadoActivacion= digitalRead (Activacion);     //Lectura del boton de Activacion y almacenamiento de su valor.
if (estadoInicial==HIGH)                        //Si el valor del estado inicial es igual a uno.
if(estadoSW1==HIGH){                            //Si el valor del Switch de corte 1 es igual a uno.
estadoSeguridadSW1 = 1 - estadoSeguridadSW1;    //Con la formula cambiamos el valor de 0 a 1 y de 1 a 0 cada que el boton es presionado.
delay (20);                                     //Eliminamos el rebote del boton con 20 Milisegundos.
}
estadoSW1 = estadoanteriorSW1;                 //Cambiamos el valor del estado del Switch de corte 1 de nuevo a cero. 
if (estadoSeguridadSW1==1)                    //Si el valor del estado estado de seguridad del Switch 1 es igual a uno.

 estado1=0;
else
 estado1=1;

switch (estado1) {
case 0:
digitalWrite (Arranque,LOW);                   //Se apaga la salida del relevador de arranque.
delay(200);                                    //Existe una pausa de 200 Milisegundos.
digitalWrite (Seguridad,LOW);                  //Se apaga la salida del relevador de seguridad.
delay(200);                                    //Existe una pausa de 200 Milisegundos.
digitalWrite (Cambio1,LOW);                     //Se apaga la salida del relevador de cambio. 
digitalWrite (Cambio2,LOW);                     //Se apaga la salida del relevador de cambio. 
delay(200);                                    //Existe una pausa de 200 Milisegundos.
digitalWrite (Seguridad,HIGH);                 //Se enciende la salida del relevador de seguridad.
delay(300);                                    //Existe una pausa de 300 Milisegundos.
digitalWrite (Arranque,HIGH);                  //Se enciende la salida del relevador de arranque.
estadoSeguridadSW1=0;
estadoSW2=0;
            break;
default:
              break;
  }

estadoSW2= digitalRead (SW2);                   //Lectura del Switch de corte 2 y almacenamiento de su valor.
estadoActivacion= digitalRead (Activacion);     //Lectura del boton de Activacion y almacenamiento de su valor.
if (estadoInicial==HIGH)                        //Si el valor del estado inicial es igual a uno.
if(estadoSW2==HIGH){                            //Si el valor del Switch de corte 2 es igual a uno.
estadoSeguridadSW2 = 1 - estadoSeguridadSW2;    //Con la formula cambiamos el valor de 0 a 1 y de 1 a 0 cada que el boton es presionado.
delay (20);                                     //Eliminamos el rebote del boton con 20 Milisegundos.
estadoSW2= estadoanteriorSW2;                   //Cambiamos el valor del estado del Switch de corte 2 de nuevo a cero. 
if (estadoSeguridadSW2==1)                    //Si el valor del estado estado de seguridad del Switch 1 es igual a uno.
   estado2=0;
else
   estado2=1;

switch (estado2) {
 case 0:
digitalWrite (Arranque,LOW);                    //Se apaga la salida del relevador de arranque.
delay(200);                                     //Existe una pausa de 200 Milisegundos.
digitalWrite (Seguridad,LOW);                   //Se apaga la salida del relevador de seguridad.
delay(200);                                     //Existe una pausa de 200 Milisegundos.
digitalWrite (Cambio1,HIGH);                    //Se enciende la salida del relevador de cambio.
digitalWrite (Cambio2,HIGH);                    //Se enciende la salida del relevador de cambio.
delay(300);                                     //Existe una pausa de 300 Milisegundos.
digitalWrite (Seguridad,HIGH);                  //Se enciende la salida del relevador de seguridad.
delay(300);                                     //Existe una pausa de 300 Milisegundos.
digitalWrite (Arranque,HIGH);                   //Se enciende la salida del relevador de arranque.
estadoSeguridadSW2=0;
estadoSW1=0;
              break;
default:
              break;
  }
}
}

ahora a seguir aprendiendo de arduino.
gracias por sus mensajes y sugerencias