Go Down

Topic: automatización iluminación (Read 1 time) previous topic - next topic

floks1234

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

Marcial



                           
Quote
// 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...
}
}

floks1234

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

Marcial

Code: [Select]
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);
      }
   }
}

floks1234

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

Marcial

:smiley-mr-green:

Code: [Select]
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);}
}

pedroarduino

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

noter

Hola.
¿Lo has conseguido ya? Mira a ver si este código pudiera servirte.
Code: [Select]

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.

floks1234

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!!!!

Go Up