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();