Hola grupo, aprovecho para presentarme, soy Jose María desde Barcelona.
Estoy comenzando a desarrollar en Arduino, y mi primera aplicación trata de comunicar un pc con un Arduino.
Utilizo la funcion millis() para generar una alarma si pasado un tiempo no recibo ninguna trama, pero me preocupa el tema del paso por 0 de la función; para no esperar los 50 dias aprox que puede tardar en generarse el caso os presento mi solución para ver si la veis correcta y puede servir para todo el mundo.
La idea es esperar a que la funcion millis sobrepase el valor del timeout, mientras esta devuelva un valor menor que el timeout no hacemos nada, solamente registramos el valor actual.
Os pego el código y a ver que opinais.
Gracias por adelantado.
unsigned long ulTimeout = 5000; //variable de control timeout (5 segundos)
unsigned long ulActual = 0; //auxiliar control timeout
void setup() {
Serial.begin(115200); //velocidad comunicacion puerto serie
ulActual = millis();
}
void loop() {
//control llegada de tramas, si en 5 seg. no llega trama completa activar led
if (millis() <= ulTimeout){
ulActual = millis();
}
else{
if (millis() - ulActual >= ulTimeout){
digitalWrite(iPinAlarmaTimeout,HIGH); //activar pin
}
else{
digitalWrite(iPinAlarmaTimeout,LOW); //desactivar pin
}
}