Jag har stött på en fråga som försöker kombinera två olika Arduino-timerprojekt som jag hittat online.
För båda projekten använder jag en DS3231 RTC, men har kunnat använda DS1307-biblioteket bara bra i min kod.
Den första koden jag tog upp började med:
#include <DS1307RTC.h>
Den andra uppsättningen kod som jag försökte kombinera hade inte detta ”include”, utan användes istället
RTC_DS1307 RTC;
som finns här:
https://learn.adafruit.com/ds1307-real-time-clock-breakout-board-kit/understanding-the-code
Som nybörjarkodare är jag inte riktigt säker på skillnaden mellan ovanstående två sätt att kalla detta bibliotek. Men jag vet det första sättet att använda ”inkludera”, om jag vill komma åt aktuell tid på RTC använder jag
RTC.get();
i motsats till den andra metoden vilket kräver:
RTC.now();
Och även om det var lätt att hitta dokumentation för att synkronisera RTC till datortid via USB-kabeln med den här praktiska biten kod:
// 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 }
Jag kan inte hitta något enkelt alternativ med ”#include DS1307RTC”
Jag trodde först att skillnaden mellan RTC.now () och RTC .get () var bara en fråga om ordbyte. Men senare när jag vill använda ett ”time_t” -samtal efter att ha initierats med ”RTC_DS1307 RTC;”
time_t timeNOW = RTC.now();
får jag felet ”kan inte konvertera” DateTime ” till ”time_t {aka long unsigned int}” vid initialisering ”
Så jag antar att en metod använder” DateTime ”och en metod använder” time_t ”. Men jag är inte säker på om så är fallet , och i så fall hur man konverterar ett ”DateTime” -värde till ett ”time_t” -värde.
Jag har två mål när jag skriver detta inlägg.
1- Kan någon förklara för mig skillnaden mellan ”#include DS1307RTC.h” och ”RTC_DS1307 RTC;” och hur den påverkar min kod.
2- Jag skulle vilja hålla fast vid att använda ”” RTC_DS1307 RTC; ”, bara för att det verkar enkelt att synkronisera min RTC med min dator. Men om jag gör det får jag ovanstående fel. Så kan någon snälla berätta för mig hur man konverterar ett ”RTC nu ()” -samtal till ett ”time_t” -värde? Eller är frågan mer komplicerad än bara en konvertering mellan datatyper?
Svar
A DateTime
är en hel klass med många metoder – en time_t
är bara en osignerad lång.
time_t
används för att lagra antalet sekunder sedan epoken (normalt 01/01/1970)
Arduino Time -biblioteket returnerar en time_t
till now()
-funktionen – men RTCLib returnerar ett DateTime-objekt.
DateTime-objektet har dock ett unixtime()
-metod som returnerar en time_t
-representation av tiden som är lagrad i DateTime-objektet.
Så du kan göra :
DateTime dt = RTC.now(); time_t time = dt.unixtime();