necesito lograr que un ldr reconozca si no hay luz para que encienda una ampolleta, y que de lo contrario la apague...
ya arme todo el circuito con un relé... logre que funcionara... al apagar la luz se enciende la de mi circuito y viceversa. aqui el codigo (muy basico)
int relayPin = 8;
int LDR = 0;
int val = 0;
int sens = 150;
int stat = LOW;
el problema que tengo es el siguiente: quiero que el sistema reaccione encendiendo la luz solo si despues de 5, 10 o n segundos no ha habido una variacion en lo que el sensor esta recibiendo.
trate poniendo unos delay() en el if pero no hay caso...
Una cuestion muy básica ... la funcion delay espera tantos microsegundos como sean en el parámetro que recibe la funcion ... Es decir, que si son 5s, seria delay(5000) ... no vaya a ser que pongas delay(5) o delay(10) y eso practicamente no se nota =S
supongo que pusiste el delay al principio del Loop, eso lo que provoca es que si hay un cambio de estado en mitad del tiempo del delay te tardará menos tiempo del que tienes puesto.
Yo lo que haría es añadir al final del Loop un condicional que si detecta cambio de estado haga el sleep.
Simplemente crea una variable que se llame Cstat (por ejemplo) y que si es diferente al Stat se ejecute el sleep.
partiendo de tu código inicial (no cortes y pegues, seguramente la sintaxis está mal solo te quiero transmitir la idea)
int relayPin = 8;
int LDR = 0;
int val = 0;
int sens = 150;
int stat = LOW;
int stat2= LOW;
void setup(){
pinMode(LDR, INPUT);
pinMode(relayPin, OUTPUT);
}
Lo que consigues así es que el Delay solo se aplique si hay un cambio de estado, cosa que ocurre cuando Stat2 es diferente a Stat.
En definitiva:
Tu inicias el Loop y las dos variables tienen el mismo valor, el Loop se sigue ejecutando y en cada iteracción se asigna el valor leido a la variable Stat.
Si hay un cambio de estado la variable Stat y la Stat2 son diferentes, por lo que se ejecuta el código del condicional que he añadido, lo primero que hace es ponerlas igual para que no se vuelva a ejecutar al siguiente Loop, lo siguiente es hacer el sleep.
Insisto, seguro que tiene problemas de sintaxis (estoy un poco oxidado), pero lo importante es la idea.
...ajustando el 500 (recuerda que la lectura análoga es de 0-1024). Además debes cuidar de que la misma luz no ilumine tu sensor, para no producir un feedback falso.