Der Unterschied zwischen "time_t" und "DateTime"


7

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?

Antworten:


9

A DateTimeist eine vollständige Klasse mit vielen Methoden - a time_tist nur eine lange Zeit ohne Vorzeichen.

time_twird verwendet, um die Anzahl der Sekunden seit der Epoche zu speichern (normalerweise 01.01.1970)

Die Arduino Time- Bibliothek gibt a time_tan die now()Funktion zurück, RTCLib gibt jedoch ein DateTime-Objekt zurück.

Das DateTime-Objekt verfügt jedoch über eine unixtime()Methode, die eine time_tDarstellung der im DateTime-Objekt gespeicherten Zeit zurückgibt.

So können Sie tun:

DateTime dt = RTC.now();
time_t time = dt.unixtime();
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.