Mejora de Programa sin usar delay();

tengo un proyecto el cual tengo que mejorar necesito hacer el cambio de giro con un motor y prender algunos leds con las señales de 3 sensores de presencia. El problema con esto es que necesito dejarlos encendidos por un tiempo y decidí hacerlos con el tan odiado delay ();

El problema es que ocupo que los sensores detecten en todo momento y realicen su tarea... pero con el delay(); se queda inactivo y hasta que no pasa el tiempo por mas que yo active algun otro sensor este no hara nada.

int i;
void setup() 
    {
      pinMode(4,INPUT);   //abrir.
      pinMode(5,INPUT);   //cerrar.
      pinMode(6,INPUT);   //sensor de chapa.
      pinMode(7,INPUT);  //puerta abierta.
      pinMode(8,OUTPUT);  //abrir.
      pinMode(9,OUTPUT);  //cerrar.
      pinMode(10,OUTPUT); //chapa cerrada.

    }

void loop() 
    {
     int Abrir  =digitalRead(4); //Estado de Sensor para ABRIR puerta
     int Cerrar =digitalRead(5); //Estado de Sensor para CERRAR puerta
     int Enclave=digitalRead(6); //Estado de Sensor de CHAPA ELECTRICA
     int Puerta =digitalRead(7); //Estado de Sensor de puerta abierta
/*Recuerda que agregaste la condicional puerta en los 3 ciclos*/
     
//////////////////////// Abrir puerta por fuera /////////////////////////
        if ((Abrir==HIGH) && (Enclave==LOW) && (Puerta == HIGH))
        { 
                  digitalWrite(8,HIGH);
                  delay(100);
                  digitalWrite(8,LOW);                              
         } 
/////////////////////// Cerrar puerta por dentro ////////////////////////
          if ((Cerrar==HIGH) && (Enclave==LOW))
        {

                  digitalWrite(9,HIGH);
                  delay(1100);
                  digitalWrite(10,HIGH); 
                  digitalWrite(9,LOW);
        }           
//////////////////////// Abrir puerta por dentro ////////////////////////
          if ((Cerrar==HIGH && Enclave==HIGH) && (Puerta == HIGH))
        {
                  delay(10);
                  digitalWrite(10,LOW);
                  delay(300);          
                  digitalWrite(8,HIGH);
                  delay(1000);
                  digitalWrite(8,LOW);

        }
   
    }

Bien como pusiste el código usando tags pero mal tu título, de hecho pésimo.
Edita ese título y ponle algo acorde con tu consulta pero AYUDA y por FAVOR retiralos del mismo

Lee las normas del foro

Busca respuestas mías donde modfifico programas usando millis() muy parecidos al tuyo.
La verdad no tengo tiempo para buscarlo
Debes crear una máquina de estados simple.

que le parece ahora surbyte?

por cierto gracias por el dato, en la brevedad lo buscare

Hola a todos...
No soy un experto aún pero lo que te sugiero es que uses el timer en este video puedes ver como lo implementa y como lo usa:

Reloj con arduino

Saludos

marvicdigital:
Hola a todos...
No soy un experto aún pero lo que te sugiero es que uses el timer en este video puedes ver como lo implementa y como lo usa:

Reloj con arduino

Saludos

Muchas gracias por el aporte, ya estoy analizando el vídeo...

Dame un momento y te doy un empujón con tu programa. Ahora que has corregido lo que te pedí me da gusto ayudarte.

int i;
bool Abrir, Cerrar, Enclave, Puerta;
bool estado1 = false;
bool estado2 = false;
byte estado3 = 0; // ojo que uso otro tipo de variable


void setup()     {
  pinMode(4,INPUT);   //abrir.
  pinMode(5,INPUT);   //cerrar.
  pinMode(6,INPUT);   //sensor de chapa.
  pinMode(7,INPUT);  //puerta abierta.
  pinMode(8,OUTPUT);  //abrir.
  pinMode(9,OUTPUT);  //cerrar.
  pinMode(10,OUTPUT); //chapa cerrada.

}

void loop()     {
    Abrir  = digitalRead(4); //Estado de Sensor para ABRIR puerta
    Cerrar = digitalRead(5); //Estado de Sensor para CERRAR puerta
    Enclave= digitalRead(6); //Estado de Sensor de CHAPA ELECTRICA
    Puerta = digitalRead(7); //Estado de Sensor de puerta abierta
    
    //////////////////////// Abrir puerta por fuera /////////////////////////
    
    if (Abrir && !EnclaveOW && Puerta && !estado1) { 
        digitalWrite(8,HIGH);
        start = millis();
        estado1 = true;
    }   
    if (estado1 && millis()-start > 100UL) {
        digitalWrite(8,LOW);                                
        estado1 = 0;
    }
      
    /////////////////////// Cerrar puerta por dentro ////////////////////////
    if (Cerrar && !Enclave && !estado2) { 
        digitalWrite(9,HIGH);
        start = millis();
        estado2 = true;
    }   
    if (estado2 && millis()-start > 1100UL) {
        digitalWrite(10, HIGH);                                
        digitalWrite(9,LOW);
        estado2 = false;
    } 

    //////////////////////// Abrir puerta por dentro ////////////////////////
    if (Cerrar && Enclave && Puerta && estado3 == 0)    {
        delay(10);
        digitalWrite(10,LOW);
        start = millis();
        estado3 = 1;
    }

    if (estado3 == 1 && millis()-start > 300UL) {
        digitalWrite(8,HIGH);
        estado3 = 2;
    }
    if (estado3 == 2 && millis()-start > 10000UL) {
        digitalWrite(8,LOW);
        estado3 = 0;
    }
}