La diferencia entre “ time_t ” y “ DateTime ”

Me he encontrado con un problema al tratar de combinar 2 proyectos de temporizador Arduino diferentes que encontré en línea.

Para ambos proyectos estoy usando un DS3231 RTC, pero he podido usar la biblioteca DS1307 sin problemas en mi código.

El primer conjunto de código que recogí comenzó con:

#include <DS1307RTC.h> 

El segundo conjunto de código que intenté combinar no tenía este «incluir», sino que se usaba

RTC_DS1307 RTC; 

como se encuentra aquí:

https://learn.adafruit.com/ds1307-real-time-clock-breakout-board-kit/understanding-the-code

Como codificador novato, no estoy muy seguro de cuál es la diferencia entre las dos formas anteriores de llamar a esta biblioteca. Pero conozco la primera forma de usar «incluir», si quiero acceder a la hora actual en el RTC, uso

RTC.get(); 

en lugar del segundo método que requiere:

RTC.now(); 

Y aunque fue fácil encontrar documentación para sincronizar el RTC con la hora de la computadora a través del cable USB usando este útil código:

// Notify if the RTC isn"t running if (! RTC.isrunning()) { Serial.println("RTC is NOT running"); } // Get time from RTC DateTime current = RTC.get(); DateTime compiled = DateTime(__DATE__, __TIME__); if (current.unixtime() < compiled.unixtime()) { //CHECKS AGAINST COMPUTERTIME Serial.println("RTC is older than compile time! Updating"); RTC.adjust(DateTime(__DATE__, __TIME__)); //UPDATES FROM COMPUTER IF OLD TIME IS OFF } 

No puedo encontrar una alternativa fácil usando «#include DS1307RTC»

Primero pensé que la diferencia entre RTC.now () y RTC .get () era solo una cuestión de sustitución de palabras. Pero más adelante, cuando quiero usar una llamada «time_t» después de inicializar con «RTC_DS1307 RTC;»

 time_t timeNOW = RTC.now(); 

Me aparece el error «no se puede convertir» DateTime » a «time_t {también conocido como long unsigned int}» en inicialización «

Así que supongo que un método usa» DateTime «y un método usa» time_t «. Pero» no estoy seguro de si este es el caso , y si es así, cómo convertir un valor «DateTime» en un valor «time_t».

Tengo dos objetivos al escribir esta publicación.

1- ¿Puede alguien explicarle me la diferencia entre «#include DS1307RTC.h» y «RTC_DS1307 RTC;» y cómo afecta mi código.

2- «Me gustaría seguir usando» «RTC_DS1307 RTC;», solo porque parece fácil sincronizar mi RTC con mi computadora. Pero si lo hago, obtengo el error anterior. Entonces, ¿alguien puede decirme cómo convertir una llamada «RTC now ()» a un valor «time_t»? ¿O el problema es más complicado que una mera conversión entre tipos de datos?

Respuesta

A DateTime es una clase completa con muchos métodos: un time_t es solo un largo sin firmar.

time_t se usa para almacenar el número de segundos desde la época (normalmente 01/01/1970)

La biblioteca Hora de Arduino devuelve un time_t a la now() función, pero RTCLib devuelve un objeto DateTime.

Sin embargo, el objeto DateTime tiene una unixtime() método que devolverá una time_t representación de la hora almacenada en el objeto DateTime.

Así que puede hacerlo :

DateTime dt = RTC.now(); time_t time = dt.unixtime(); 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *