Pues estoy medio-acabando un proyecto de control de iluminación (leds de alta potencia) y otros procesos relacionados para un acuario de 500 litros (control de alimentadores automáticos, control de temperaturas (ambiente, del agua, de la pantalla de leds) y de varios ventiladores.
El tema es que quisiera para poder probar el funcionamiento de todos los procesos, "acelerar" las 24 horas del día en por ejemplo 1 minuto, o 24 segundos, es decir poder valorar el funcionamiento de todos los procesos en un corto período de tiempo.
Utilizo un Arduino Mega y un RTC Ds1307, con la librería "DS1307new.h".
En general controlo los procesos con condicionales como los dos siguientes:
if (RTC.hour >=10 && RTC.hour <13)
{
Encender los leds a xx intensidad
}
if (Temperatura de la pantalla de leds >35)
{
Encender los ventiladores
}
Todos los procesos llevan una estructura similar.
Lo que sucede que son muchos procesos a lo largo del día y se me ocurrió que si hay alguna manera de "engañar" al RTC o al programa para que el día transcurra en un corto período de tiempo, podría chequear todos ellos en un instante.
Para mostrar el reloj en un pequeño display utilizo "RTC.getTime()", que en principio podría comentar esa línea y utilizar la función millis() para simular un ciclo de 24 horas en menos tiempo, pero no se me ocurre la manera.
Hola,
Puedes hacerlo de muchas formas, pero yo creo que una sencilla de implementar es comentar todas las lineas del RTC y crear una variable global "hora" para los tests. Después pones un botón y cuando pulses el boton incrementas horas, así puedes ir pasando el tiempo rapidamente.
Saludos,
Pues he hecho algo parecido a lo que me sugiere alfredomrh, en realidad lo que he hecho fue crear 3 variables declaradas inicialmente para ser visibles durante todo el programa, las he llamado "Hora, Minutos, Segundos" y una función que mantiene actualizados las tres variables con los datos del RTC.
He creado una variable boolean que en caso de tomar un valor, por ejemplo verdadero, dentro de la función muestra los datos del RTC, y en el caso contrario una especie de contador de "minutos y segundos" que vá asignando a las horas los minutos del contador y a los segundos, los minutos del contador.
Mejor el trozo de sketch:
PreMillis = millis();
Hora = 0, Minutos = 0, Segundos = 0; //Los segundos siempre son = cero
if ((millis() - PreMillis) >= 100) //Un décimo de segundo para aumentar un minuto el contador
{
PreMillis = millis();
Minutos++;
if (Minutos == 60)
{
Minutos = 0;
Hora++;
if (Hora == 24)
{
Hora = 0;
Minutos = 0;
}
}
}
De esta foma, el reloj del TFT avanza 1 hora en 6 segundos.
Si bien he tenido que hacer otros "retoques" en el programa, especialmente en cálculos de los tiempos para reproducir el efecto amanecer y anochecer, básicamente de esta manera puedo checar todos los mecanismos en poco más de 2 minutos.