Paso 5: Conseguir Real con el tiempo - añadir un reloj de tiempo Real
Por ahora, usted debe darse cuenta de las limitaciones de un reloj de simulación de software. ¿Cómo mantendrá la precisión horaria un reloj o un teléfono? En primer lugar, necesita una fuente de alimentación continua, y en segundo lugar, usted necesita un cristal de precisión. Un módulo de reloj en tiempo Real se encarga de esto para nosotros. Una vez que, como su pequeña batería tiene poder, mantendrá tiempo exactamente a varios segundos por día.
Módulo RTC de Adafruit utiliza el mismo bus I2C que utiliza la pantalla. ¿Cómo funciona esto? Cada elemento tiene una dirección única, y las bibliotecas manejar el resto para nosotros.
// Start the Real Time Clock<br> RTC_DS1307 rtc = RTC_DS1307();
En setup(), necesitamos comprobar si el reloj está funcionando y si no lo es. Entonces podemos inicializar la variable con la hora actual.
// start and set clock if not already running<br> rtc.begin(); bool setClockTime = !rtc.isrunning(); Serial.print("rtc.isrunning() ="); Serial.println(!setClockTime); if (setClockTime) { rtc.adjust(DateTime(uploadDateTime)); } // initalize time variables DateTime time = rtc.now(); hours = time.hour(); minutes = time.minute(); seconds = time.second(); lastMillis = millis();
Tenemos que verificar la hora RTC cada cierto tiempo ya que todavía dependemos del contador interno a segundos de incremento. ¿Con qué frecuencia? Una vez una hora:
// Check RTC at top of hour and reset variables<br> if (minutes == 0 && seconds == 0){ DateTime time = rtc.now(); hours = time.hour(); minutes = time.minute(); seconds = time.second(); }
Tiempo para explorar:
- Los módulos RTC también proporciona información sobre la fecha. ¿Cómo establecer una alarma para días de semana solamente?
- ¿Qué tan preciso es su módulo RTC?
- El código para configurar las variables de tiempo en setup() y loop() son casi idénticos. ¿Podríamos crear una función utilizada por ambos?