automatización iluminación

haciendo un proyecto de iluminación con 4 sensor pir en diferentes areas sin embargo no es tan sensible por lo que es común q no detevte presencia a pesar de que haya, por lo que quiero darle un tiempo después de q no detecta, pero si le doy el tiempo delay para q quede prendido no sensan los demas mientras está el delay. que puedo utilizar en ese caso?
saludos

// Tiempo_de_Espera = milésimas que quieres retrasar
void Encender()
{
...
Tiempo_de_Esperado=0;
...
}

Void Apagar()
{
...
if ( Condicion_para_Apagar && Tiempo_de_Esperado==0)
{
Tiempo_de_Esperado=Tiempo_de_Espera + millis();
}
...
if ( Condicion_para_Apagar && Tiempo_de_Esperado>0 && millis()>Tiempo_de_Esperado)
{
digitalwrite...
}
}

Gracias Marcial, estoy intentando adaptar tu código con un solo led y sensor. Sin embargo la espera solo la hace en los primeros segundos desde q lo conecto, si se apaga y mando señal para q prenda de nuevo al quitar la señal en seguida se apaga y ya no hace la espera. agrego código.

int A;
int E=11;
int S=2;
long Tiempoespera=5000;
void setup(){
pinMode(E, INPUT);
pinMode(S, OUTPUT);
}
void loop(){
A=digitalRead(E);
if(A==HIGH);
{
digitalWrite(S, HIGH);
}
else
{
if(A=LOW&&Tiempoespera==0)
{
Tiempoespera=Tiempoespera+millis();
}
if(A==LOW&&Tiempoespera>0&&millis()>Tiempoespera)
{
digitalWrite(S, LOW);
}
}
}

Tampoco ocupe el void inicio() porq me marca error.

Gracias y saludos

int A;
int E=11;
int S=2;
long Tiempoespera=5000;
long Tiempoesperado=0;
void setup(){
   pinMode(E, INPUT);
   pinMode(S, OUTPUT);
}
void loop(){
   A=digitalRead(E);
   if(A==HIGH);
   {
      digitalWrite(S, HIGH);
      Tiempoesperado=0;
   }
   else
   {
      if(A=LOW&&Tiempoesperado==0)
      {
         Tiempoesperado=Tiempoespera+millis();
      }
      if(A==LOW&&Tiempoesperado>0&&millis()>Tiempoesperado)
      {
         digitalWrite(S, LOW);
      }
   }
}

pues sigue igual si le doy señal se queda encendido g aunque ya no detecte queda prendido =S

:grin:

bool A;
int E=11;
int S=2;
long Tiempoespera=5000;
long Tiempoesperado=0;
void setup(){
   pinMode(E, INPUT);
   pinMode(S, OUTPUT);
}
void loop(){
   A=digitalRead(E);
   if(A==HIGH)
   {
      digitalWrite(S, HIGH);
      Tiempoesperado=0;
   }
   else if(Tiempoesperado==0) {Tiempoesperado=Tiempoespera+millis();}
      else if(millis()>Tiempoesperado) {digitalWrite(S, LOW);}
}

y digo yo... que lo ideal en este caso es poner dos placas, si son de las más baratas no se encarecerá mucho el proyecto

la primera para los sensores y el stand-by de la segunda, que solo entra en funcionamiento para retardar las luces, además de que puede trabajar de manera que encienda por zonas dependiendo del sensor que esté actuando

lo poco que he aprendido de arduino en dos semanas, si puedes separar tareas, mejor

Hola.
¿Lo has conseguido ya? Mira a ver si este código pudiera servirte.

bool A;
int E=11;
int S=2;
long Tiempopulsacion=0;
long Tiempoespera=5000;
long Tiempoesperado=5000;
void setup(){
   pinMode(E, INPUT);
   pinMode(S, OUTPUT);
}
void loop(){
   A=digitalRead(E);
   if(A==HIGH)
   {
      digitalWrite(S, HIGH);
      Tiempoesperado=0;
      Tiempopulsacion=millis();
   }
   if (Tiempoesperado<Tiempoespera){
      Tiempoesperado=millis()-Tiempopulsacion;
   } else {
      digitalWrite(S,LOW);
   }
}

Saludos.

resjlta que son vacaciones y me dejé los arduinos y equipo en la oficina del trabajo. =+ regreso hasta el 7 de enero, regresando lo lo pruebo gravias y felicez fiestas!!!!