Diferența dintre “ time_t ” și “ DateTime ”

Am întâmpinat o problemă, încercând să combin 2 proiecte diferite de temporizator Arduino pe care le-am găsit online.

Pentru ambele proiecte folosesc un DS3231 RTC, dar am reușit să folosesc biblioteca DS1307 foarte bine în codul meu.

Primul set de cod pe care l-am preluat a început cu:

#include <DS1307RTC.h> 

Al doilea set de coduri pe care am încercat să îl combin nu avea acest „include”, ci în schimb l-am folosit

RTC_DS1307 RTC; 

așa cum se găsește aici:

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

În calitate de programator novice, nu prea știu care este diferența dintre cele două moduri de mai sus de a apela această bibliotecă. Dar știu prima modalitate folosind „include”, dacă vreau să accesez ora curentă pe RTC, folosesc

RTC.get(); 

spre deosebire de a doua metodă ceea ce necesită:

RTC.now(); 

Și, deși a fost ușor să găsiți documentație pentru a sincroniza RTC cu timpul computerului prin cablul USB folosind acest bit de cod la îndemână:

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

Nu găsesc nicio alternativă ușoară folosind „#include DS1307RTC”

Am crezut mai întâi că diferența dintre RTC.now () și RTC .get () a fost doar o chestiune de substituire a cuvintelor. Dar mai târziu, când vreau să folosesc un apel „time_t” după inițializarea cu „RTC_DS1307 RTC;”

 time_t timeNOW = RTC.now(); 

Primesc eroarea „nu se poate converti” DateTime ” la „time_t {aka long unsigned int}” în inițializare „

Deci, presupun că o metodă folosește„ DateTime ”și o metodă folosește„ time_t ”. Dar nu sunt sigur dacă acesta este cazul și, dacă da, cum să convertiți o valoare „DateTime” într-o valoare „time_t”.

Am două obiective în scrierea acestei postări.

1- Poate cineva să vă explice diferența dintre „#include DS1307RTC.h” și „RTC_DS1307 RTC;” și modul în care îmi afectează codul.

2- Aș dori să rămân cu „RTC_DS1307 RTC;”, doar pentru că pare ușor să îmi sincronizez RTC-ul cu computerul. Dar dacă o fac, primesc eroarea de mai sus. Așadar, poate cineva să-mi spună cum să convertesc un apel „RTC now ()” într-o valoare „time_t”? Sau problema este mai complicată decât o simplă conversie între tipurile de date?

Răspuns

A DateTime este o clasă completă cu multe metode – un time_t este doar un lung nesemnat.

time_t este utilizat pentru a stoca numărul de secunde de la epoca (în mod normal 01/01/1970)

Biblioteca Arduino Time returnează un time_t la funcția now() – dar RTCLib returnează un obiect DateTime.

Obiectul DateTime are, totuși, un unixtime() metodă care va returna o reprezentare time_t a timpului stocat în obiectul DateTime.

Deci puteți face :

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

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *