Forskellen mellem “ time_t ” og “ DateTime ”

Jeg er stødt på et problem, der prøver at kombinere 2 forskellige Arduino-timer-projekter, jeg har fundet online.

For begge projekter bruger jeg en DS3231 RTC, men har kunnet bruge DS1307-biblioteket helt fint i min kode.

Det første sæt kode jeg hentede startede med:

#include <DS1307RTC.h> 

Det andet sæt kode jeg forsøgte at kombinere havde ikke dette “include”, men blev i stedet brugt

RTC_DS1307 RTC; 

som fundet her:

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

Som nybegynderkoder er jeg ikke rigtig sikker på, hvad forskellen er på de to ovennævnte måder at kalde dette bibliotek på. Men jeg kender den første måde at bruge “inkludere”, hvis jeg vil have adgang til den aktuelle tid på RTC, bruger jeg

RTC.get(); 

i modsætning til den anden metode hvilket kræver:

RTC.now(); 

Og selvom det var let at finde dokumentation til at synkronisere RTC til computertiden via USB-kablet ved hjælp af denne praktiske bit kode:

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

Jeg kan ikke finde noget let alternativ ved hjælp af “#include DS1307RTC”

Jeg troede først, at forskellen mellem RTC.now () og RTC .get () var bare et spørgsmål om ordudskiftning. Men senere, når jeg vil bruge et “time_t” -opkald efter initialisering med “RTC_DS1307 RTC;”

 time_t timeNOW = RTC.now(); 

får jeg fejlen “kan ikke konvertere” DateTime ” til “time_t {aka long unsigned int}” i initialisering “

Så jeg antager, at en metode bruger” DateTime “, og en metode bruger” time_t “. Men jeg er ikke sikker på, om dette er tilfældet , og i bekræftende fald, hvordan man konverterer en “DateTime” -værdi til en “time_t” -værdi.

Jeg har to mål med at skrive dette indlæg.

1- Kan nogen venligst forklare til mig forskellen mellem “#include DS1307RTC.h” og “RTC_DS1307 RTC;” og hvordan det påvirker min kode.

2- Jeg vil gerne holde fast ved at bruge “” RTC_DS1307 RTC; “, kun fordi det synes let at synkronisere min RTC til min computer. Men hvis jeg gør det, får jeg ovenstående fejl. Så kan nogen fortælle mig, hvordan jeg konverterer et “RTC nu ()” -opkald til en “time_t” -værdi? Eller er problemet mere kompliceret end blot en konvertering mellem datatyper?

Svar

A DateTime er en fuld klasse med mange metoder til det – en time_t er bare en usigneret lang.

time_t bruges til at gemme antallet af sekunder siden epoken (normalt 01/01/1970)

Arduino Time -biblioteket returnerer en time_t til now() -funktionen – men RTCLib returnerer et DateTime-objekt.

DateTime-objektet har dog et unixtime() metode, der returnerer en time_t repræsentation af den tid, der er gemt i DateTime-objektet.

Så du kan gøre :

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

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *