Mejorar código

Hola buenas a todoss!! Estoy tratando de mejorar este código, de cara a que sea más eficiente(más rápido) y que cargue menos al microcontrolador...

La idea principal es que si detecta el sensor 1, se active rele1, al tiempo el rele2 y después al rato el rele3. Si detecta el sensor 2 que se active el rele2 y al rato el rele3 y uno juntos. Luego si detecta el sensor 3, que se active el rele3, al rato el rele2 y al rato el rele1.Y finalmente una vez que están activados los 3 reles y detecte por ejemplo el sensor 1 que se apague al contrario de como lo ha encendido el mismo sensor. Y así con los dos sensores restantes...

#define BLYNK_PRINT Serial


#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
BlynkTimer timer;
#include <TimeLib.h>

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "cddfdfsfdytuygiyyt";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "xxxxxx";
char pass[] = "xxxxxxxxxxxx";






int s1=D1;
int s2=D2;
int s3=D0;
int ldr=A0;

int led1=D5;
int led2=D6;
int led3=D7;
int led4=D8;

int estados1=0;
int estados2=0;
int estados3=0;
int estadoldr;


const unsigned long ret1 =  400;
const unsigned long ret2 =  800;
const unsigned long lumenes=400;


unsigned long cont1     = 0;
unsigned long cont2     = 0;
unsigned long cont3     = 0;
unsigned long cont4     = 0;
unsigned long cont5     = 0;
unsigned long cont6     = 0;
unsigned long cont7     = 0;
unsigned long cont8     = 0;
unsigned long cont9     = 0;
unsigned long cont10    = 0;
unsigned long cont11    = 0;
unsigned long cont12    = 0;
unsigned long cont13    = 0;

unsigned long tempp1=0;
unsigned long tempp2=0;
unsigned long tempp3=0;
unsigned long tempp4=0;
unsigned long tempp5=0;
unsigned long tempp6=0;

int temp1=0;
int temp2=0;
int temp3=0;
int temp4=0;
int temp5=0;
int temp6=0;
int temp7=0;
int temp8=0;
int temp9=0;
int temp10=0;
int temp11=0;
int temp12=0;

int temp111=0;
int temp222=0;
int temp333=0;

BLYNK_READ(V6){
  Blynk.virtualWrite(V6, estadoldr);}  

void setup(){
 Serial.begin(9600);

  Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442);

 pinMode(s1, INPUT); /*activación del pin 8 como entrada: tiempo del rebote del ultrasonido*/
 pinMode(s2, INPUT); /*activación del pin 8 como entrada: tiempo del rebote del ultrasonido*/
 pinMode(s3, INPUT); /*activación del pin 8 como entrada: tiempo del rebote del ultrasonido*/
 pinMode(ldr,INPUT);
 
 pinMode(led1, OUTPUT);
 pinMode(led2, OUTPUT);
 pinMode(led3, OUTPUT);
 pinMode(led4, OUTPUT);
 
 digitalWrite(led1,HIGH);
 digitalWrite(led2,HIGH);
 digitalWrite(led3,HIGH);
 digitalWrite(led4,HIGH);
   
 
}

void loop(){

 Blynk.run();

estados1=digitalRead(s1);
estados2=digitalRead(s2);
estados3=digitalRead(s3); 
estadoldr=analogRead(ldr);
Serial.println(estadoldr);
if (estados1==HIGH&&estados2==LOW&&estados3==LOW) { temp1++; temp111=0;} else{temp1=0;temp2=0;temp111++;}
if (temp1 == 1&&estadoldr<lumenes){temp2=1;
                tempp1 = millis();
                cont1 = tempp1+ ret1;
                cont2 = tempp1+ ret2;
                }

                
  
if (temp2 == 1) {digitalWrite(led4,LOW);digitalWrite(led1,LOW);
                 if (millis()>= cont1){digitalWrite(led2,LOW);}
                 if (millis()>= cont2) {digitalWrite(led3,LOW);}
                 }

          
if(estados1==LOW&&temp222>1&&temp333>1&&temp111==1){temp3++;} else {temp3=0;temp4=0;}

  if(temp3 == 1){temp4=1;
                 tempp2=millis();
                 cont3 = tempp2+ ret1;
                 cont4 = tempp2+ ret2;
                 }
                 
               

  if (temp4 == 1 ){digitalWrite(led1,HIGH);
                   if (millis()>= cont3) {digitalWrite(led2,HIGH);}
                   if (millis()>= cont4) {digitalWrite(led3,HIGH);digitalWrite(led4,HIGH);
                  } temp111=0;
                  }






          


if (estados2==HIGH&&estados1==LOW&&estados3==LOW) { temp5++; temp222=0;} else{temp5=0;temp6=0;temp222++;}
if (temp5 == 1&&estadoldr<lumenes){temp6=1;
                tempp3 = millis();
                
                cont5 = tempp3+ ret1;
               }

                
  
if (temp6 == 1) {digitalWrite(led4,LOW);digitalWrite(led2,LOW);
                 if (millis()>= cont5){digitalWrite(led1,LOW);digitalWrite(led3,LOW);}
             
                 }

          
if(estados2==LOW&&temp111>1&&temp333>1&&temp222==1){temp7++;} else {temp7=0;temp8=0;}

  if(temp7 == 1){temp8=1;
                 tempp4=millis();
               
                 cont6 = tempp4+ ret1;
                }
               

  if (temp8 == 1 ){digitalWrite(led1,HIGH);digitalWrite(led3,HIGH);
                   if (millis()>= cont6) {digitalWrite(led2,HIGH);digitalWrite(led4,HIGH);}
                   temp222=0; 
                   
                  

                  }  




                  


   if (estados3==HIGH&&estados2==LOW&&estados1==LOW) { temp9++;temp333=0; } else{temp9=0;temp10=0;temp333++;}
if (temp9 == 1&&estadoldr<lumenes){temp10=1;
                tempp5 = millis();
                cont7 = tempp5+ ret1;
                cont8 = tempp5+ ret2;
               
                }

                
  
if (temp10 == 1) {digitalWrite(led4,LOW);digitalWrite(led3,LOW);
                 if (millis()>= cont7){digitalWrite(led2,LOW);}
                 if (millis()>= cont8) {digitalWrite(led1,LOW);
                  }
                 }

          
if(estados3==LOW&&temp111>1&&temp222>1&&temp333==1){temp11++;} else {temp11=0;temp12=0;}

  if(temp11 == 1){temp12=1;
                 tempp6=millis();
                 cont9 = tempp6+ ret1;
                 cont10 = tempp6+ ret2;
                }
                 
               

  if (temp12 == 1 ){digitalWrite(led3,HIGH);
                   if (millis()>= cont9) {digitalWrite(led2,HIGH);}
                   if (millis()>= cont10) {digitalWrite(led1,HIGH);digitalWrite(led4,HIGH);}
                    temp333=0;
                   
                  }
          
               
                   
    }

Incluyo dibujo para que se entienda mejor, muchísimas gracias!!

Nuevo doc 2018-09-30 11.17.19_20180930111751.pdf (611 KB)

Ay dios!! jejeje lo de los puertos si lo manejé en Arduino uno, veré con el esp32...

Y lo de acortarlo, tendré que pensarlo como hacerlo... porque no tengo mucha idea.

gracias!!

Te agradezco tu opinión, leeré detenidamente todo lo que me has puesto... Quería preguntar para tomar la dirección correcta y poder “moñear” más en mi código, que es lo que busco, me gusta romperme la cabeza, no me gustan que me den los deberes hechos.. Pero entiendo que en un foro es para ayudarse, hablar y guiar a la gente(no lo digo a malas, para nada, ni para nadie...)
Y si no soy capaz y me quedo atrancado, pediré algo de ayuda.

Cierto que tendré que trabajar los arrays, pensé que me iban a decir poner interrupciones en los sensores para que fuera más rápido...

A ver qué saco de todo esto, muchas gracias..

Lo entiendo.

Gracias

Hola!! Jo... que pasada de código!! Ahora me toca entenderlo y pillarle el truco cuando tenga un rato.

Muchas gracias ArduMyth!!

Me vas a decir ArduMyth que ese código hace lo que @Sergitopp puso en el primer post?

Te aplaudo por entenderlo @ArduMyth

De todos modos lo que no entiendo es que tiene que ver Blynk con el resto del código.
Los interruptores serán luego comandos Blynk?

Buenas, los detectores que utilizo son los de infrarrojo hc sr501 , se me olvidó aclarar que esos reles se encienden si la resistencia ldr está por debajo de un valor analógico. Y lo de blynk lo dejé ahí de momento porque me daba error subirlo por OTA y tener blynk...