Ich habe ein Problem beim Versuch, zwei verschiedene Arduino-Timer-Projekte zu kombinieren, die ich online gefunden habe.
Für beide Projekte verwende ich eine DS3231-RTC, konnte aber die DS1307-Bibliothek in meinem Code problemlos verwenden.
Der erste Code-Satz, den ich aufgenommen habe, begann mit:
#include <DS1307RTC.h>
Der zweite Satz von Code, den ich zu kombinieren versuchte, hatte nicht dieses „include“, sondern verwendete
RTC_DS1307 RTC;
wie hier zu finden:
https://learn.adafruit.com/ds1307-real-time-clock-breakout-board-kit/understanding-the-code
Als Anfänger bin ich mir nicht sicher, was der Unterschied zwischen den beiden oben genannten Möglichkeiten ist, diese Bibliothek aufzurufen. Aber ich kenne den ersten Weg mit „include“, wenn ich auf die aktuelle Zeit auf der RTC zugreifen möchte, verwende ich
RTC.get();
im Gegensatz zur zweiten Methode Dies erfordert:
RTC.now();
Und während es einfach war, Dokumentation zu finden, um die RTC mit der Computerzeit über das USB-Kabel zu synchronisieren, verwenden Sie diesen praktischen Code:
// 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 }
Mit „#include DS1307RTC“ kann ich keine einfache Alternative finden.
Ich dachte zuerst, dass der Unterschied zwischen RTC.now () und RTC .get () war nur eine Frage der Wortersetzung. Aber später, wenn ich nach der Initialisierung mit „RTC_DS1307 RTC“ einen „time_t“ -Aufruf verwenden möchte;
time_t timeNOW = RTC.now();
Ich erhalte den Fehler „kann“ DateTime „nicht konvertieren. zu „time_t {aka long unsigned int}“ bei der Initialisierung „
Ich gehe also davon aus, dass eine Methode“ DateTime „und eine Methode“ time_t „verwendet. Ich bin mir jedoch nicht sicher, ob dies der Fall ist und wenn ja, wie man einen „DateTime“ -Wert in einen „time_t“ -Wert konvertiert.
Ich habe zwei Ziele beim Schreiben dieses Beitrags.
1- Kann jemand dies bitte erklären? mir den Unterschied zwischen „#include DS1307RTC.h“ und „RTC_DS1307 RTC“; und wie es sich auf meinen Code auswirkt.
2- Ich möchte bei der Verwendung von „“ RTC_DS1307 RTC; „bleiben, nur weil es einfach zu sein scheint, meine RTC mit meinem Computer zu synchronisieren. Aber wenn ich das tue, bekomme ich den obigen Fehler. Kann mir bitte jemand sagen, wie man einen „RTC now ()“ – Aufruf in einen „time_t“ -Wert konvertiert? Oder ist das Problem komplizierter als nur eine bloße Konvertierung zwischen Datentypen?
Antwort
A DateTime
ist eine vollständige Klasse mit vielen Methoden – eine time_t
ist nur eine lange Länge ohne Vorzeichen.
time_t
wird verwendet, um die Anzahl der Sekunden seit der Epoche (normalerweise 01/01/1970) zu speichern.
Die Arduino Time -Bibliothek gibt a zurück time_t
an die Funktion now()
– aber RTCLib gibt ein DateTime-Objekt zurück.
Das DateTime-Objekt hat jedoch ein unixtime()
-Methode, die eine time_t
-Darstellung der im DateTime-Objekt gespeicherten Zeit zurückgibt.
Sie können dies also tun :
DateTime dt = RTC.now(); time_t time = dt.unixtime();