En mi proyecto estoy utilizando un ethernet shield conectado a un router y dos sensores de movimiento y cuando se detecta movimento por alguno de los dos sensores, recibo un email al movil.. Bueno, en realidad recibo mas de 30 y 40 emails en muy poco tiempo, ese es el problema..
¿Hay alguna forma de hacer que cuando me envie un email, hasta pasados 30 minutos no vuelva a enviarme otro email aunque detecte movimiento los sensores?
Esta es la parte de codigo de los sensores y el envio de email:
int SenUno=2;
int SenDos=3;
int ValSenUno = 0;
int ValSenDos = 0;
void setup() {
pinMode(SenUno, INPUT);
pinMode(SenDos, INPUT);
}
void loop() {
ValSenUno = digitalRead(SenUno);
ValSenDos = digitalRead(SenDos);
if(ValSenUno == HIGH || ValSenDos == HIGH ){
send_email();
delay(10);
}
}
Gracias pero no me sirve.. Necesito que no envie ningun email hasta pasados al menos 10 minutos del ultimo email.. He estado probando con millis cambiando de estado un boleano y que solo deje enviar emails cuando este en true.. pero no entiendo muy bien como funciona la funcion millis.. esto es lo que he estado probando, pero hace lo mismo que tu codigo, envia un email por cada deteccion..
long previousMillis = 0;
long interval = 100000;
bool Estado = true;
void loop() {
ValSenUno = digitalRead(SenUno);
ValSenDos = digitalRead(SenDos);
unsigned long currentMillis = millis(); // Se toma el tiempo actual
if (currentMillis - previousMillis > interval){
Estado = !Estado;
previousMillis = currentMillis;
}
if(ValSenUno == HIGH || ValSenDos == HIGH ){
if(Estado){
send_email();
Estado = !Estado;
delay(10);
}
}
}
Lo que necesito es una funcion con millis, que ponga en false el boleano al enviar un email y hasta que no pasen 10 minutos no ponga el boleano en true, de esta forma al hacer uso de if(Estado), solo enviara el email en caso de que el boleano este en true..
Funciona bien pero hay un fallo y es que solo envia el primer email con la primera deteccion, luego he llegado a esperar hasta 20 minutos pero ya no recibo ningun email mas...
Llevo un buen rato mirando donde podria estar el fallo pero no lo veo..