Detecte un error en tiempo en la librería CountUpDownTimer.h (que es muy buena), representa una error de 4 segundos por minuto. Leyendo los comentario de github (Time misscalculation · Issue #14 · AndrewMascolo/CountUpDownTimer · GitHub) el programador le recomienda a una persona que también encontró el defecto, que utilice un modulo RTC.
Mi consulta es como aplicar el RTC a esa galería. Me podrían dar un ejemplo?
Creo que el problema no es la precisión del cristal del Arduino que, pese a no ser extremadamente exacto, es imposible que tenga una desviación de 4 segundos por minuto. He revisado el código de la librería y he visto que en la línea 69 del fichero CountUpDownTimer.h pone:
time = _intTime;
Es un fallo que a veces se comete al trabajar con millis(). Porque no se está teniendo en cuenta el tiempo de más que puede haber transcurrido desde que se cumplió el tiempo esperado y se comprueba que ha transcurrido ese tiempo. Esa línea de código, tal como está, hace que se "coma" ese exceso de tiempo. Ese "exceso de tiempo" se da si el loop() "tarda mucho" en cada iteración. Y dos milisegundos ya es "mucho" en este caso.
Creo que el problema se debería de solucionar sustituyendo esa línea por:
time += duration;
Esto hace que "empiece a contar el siguiente segundo" cuando se debió de haber "detectado" y no cuando se le "detectó".
Además, el if de las dos siguientes líneas de código creo que no hacen falta. Con lo que yo las quitaría o comentaría:
if(_intTime < time)
time = 0; // check to see if micros() has rolled over, if not, then increment "time" by duration
No me he parado a mirar a fondo la librería. No sé qué hace exactamente para pausar y reanudar el temporizador. Pero creo que el cambio no afecta al funcionamiento del resto de la librería.
Espero que con el cambio propuesto se solucione el problema.
Muchisimas gracias, me has sido de gran ayuda, tu correccion no afecto a nada e la funcionalidad. Lo constraste con un cronometro y el 10min me dio un error de 4seg, el cual pongo en duda ya que un leve error en el comienzo de ambos se incrementa a mayor tiempo.
Hola a todos:
En mi opinión estais divagando un poco sobre una libreria que el propio autor comenta que no funciona al 100% y echandole la culpa al Arduinio recomienda usar un RTC.
Mira no puedes. tienes que usar las librerias del RTC que vayas ha usar. un RTC, (real time clock), es eso un reloj con alimentación propia que tiene mimos errores (habria que ponerlo en hora 2 veces al año como mucho), y te lleva correctamente segundos, minutos...etc, por llevar lleva el calendario completo hasta no se que año. pero esto supongo ya lo sabes.
No se lo que quieres hacer, (indicalo seguro existe una forma mas facil), pero para lo que estas probando como es cronometrar 10 minutos con el RTC y usando su libreria, tendrias tu que programar el codigo por ejemplo :
1- leo los minutos actuales y los guardo en una variable por ejemplo ant_minutos
2- entras en un bucle por ejemplo while (nueva_lectura !=(ant_minutos+10)){}
3-¡¡ALARMA!!!
Y lo "clavas" con algun errorcillo de microsegundos. De forma parecida deveras inplementar las funciones que lleva esa polemica libreria. E incluso es posible que ya exista una libreria con esas funciones para un RTC, (no lo se no la he buscado).
Espero me hayas entendido. Saludos chicos.