La differenza tra “ time_t ” e “ DateTime ”

Mi sono imbattuto in un problema cercando di combinare 2 diversi progetti di timer Arduino che ho trovato online.

Per entrambi i progetti sto utilizzando un RTC DS3231, ma sono stato in grado di utilizzare la libreria DS1307 perfettamente nel mio codice.

Il primo set di codice che ho preso è iniziato con:

#include <DS1307RTC.h> 

Il secondo set di codice che ho provato a combinare non aveva questo “include”, ma invece utilizzava

RTC_DS1307 RTC; 

come trovato qui:

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

In quanto programmatore alle prime armi, non sono proprio sicuro di quale sia la differenza tra i due modi precedenti per chiamare questa libreria. Ma conosco il primo modo usando “include”, se voglio accedere allora corrente sullRTC utilizzo

RTC.get(); 

al contrario del secondo metodo che richiede:

RTC.now(); 

E mentre era facile trovare la documentazione per sincronizzare lRTC con lora del computer tramite il cavo USB utilizzando questo pratico bit di codice:

// 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 } 

Non riesco a trovare unalternativa facile utilizzando “#include DS1307RTC”

Per prima cosa ho pensato che la differenza tra RTC.now () e RTC .get () era solo una questione di sostituzione delle parole. Ma in seguito, quando voglio utilizzare una chiamata “time_t” dopo linizializzazione con “RTC_DS1307 RTC;”

 time_t timeNOW = RTC.now(); 

ottengo lerrore “Impossibile convertire” DateTime ” a “time_t {aka long unsigned int}” nellinizializzazione “

Quindi” presumo che un metodo utilizzi “DateTime” e un metodo utilizzi “time_t”. Ma non sono sicuro che sia così e, in tal caso, come convertire un valore “DateTime” in un valore “time_t”.

Ho due obiettivi nello scrivere questo post.

1- Qualcuno può spiegare a me la differenza tra “#include DS1307RTC.h” e “RTC_DS1307 RTC;” e come influisce sul mio codice.

2- Mi piacerebbe continuare a usare “” RTC_DS1307 RTC; “, solo perché sembra facile sincronizzare il mio RTC con il mio computer. Ma se lo faccio, ottengo lerrore di cui sopra. Quindi qualcuno può dirmi come convertire una chiamata “RTC now ()” in un valore “time_t”? O il problema è più complicato di una semplice conversione tra tipi di dati?

Risposta

A DateTime è una classe completa con molti metodi: un time_t è solo un long senza segno.

time_t viene utilizzato per memorizzare il numero di secondi trascorsi da epoch (normalmente 01/01/1970)

La libreria Time di Arduino restituisce un time_t alla funzione now(), ma RTCLib restituisce un oggetto DateTime.

Loggetto DateTime, tuttavia, ha un unixtime() metodo che restituirà una time_t rappresentazione dellora memorizzata nelloggetto DateTime.

Quindi puoi farlo :

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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *