Ich bin auf ein Problem gestoßen, bei dem versucht wurde, 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 Satz Code, den ich aufgenommen habe, begann mit:
#include <DS1307RTC.h>
Der zweite Codesatz, den ich zu kombinieren versuchte, hatte dieses "Include" nicht, sondern wurde verwendet
RTC_DS1307 RTC;
wie hier gefunden:
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 Uhrzeit der von mir verwendeten RTC zugreifen möchte
RTC.get();
im Gegensatz zu der zweiten Methode, die erfordert:
RTC.now();
Und während es einfach war, Dokumentation zu finden, um die RTC mit der Computerzeit über das USB-Kabel mit diesem praktischen Code zu synchronisieren:
// 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
}
Ich kann mit "#include DS1307RTC" keine einfache Alternative finden.
Ich dachte zuerst, dass der Unterschied zwischen RTC.now () und RTC.get () nur eine Frage der Wortsubstitution ist. 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 die Fehlermeldung "DateTime 'kann bei der Initialisierung nicht in' time_t {aka long unsigned int} 'konvertiert werden."
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 ein "DateTime" -Wert in einen "time_t" -Wert konvertiert werden soll.
Ich habe zwei Ziele beim Schreiben dieses Beitrags.
1- Kann mir bitte jemand den Unterschied zwischen "#include DS1307RTC.h" und "RTC_DS1307 RTC" erklären? 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. Wenn ich dies jedoch tue, wird der obige Fehler angezeigt. Kann mir jemand bitte sagen, wie ich konvertieren soll? ein "RTC now ()" - Aufruf eines "time_t" -Werts? Oder ist das Problem komplizierter als nur eine bloße Konvertierung zwischen Datentypen?
quelle