Różnica między “ time_t ” a “ DateTime ”

Napotkałem problem podczas próby połączenia 2 różnych projektów timera Arduino, które znalazłem w Internecie.

W obu projektach używam DS3231 RTC, ale mogłem używać biblioteki DS1307 w moim kodzie.

Pierwszy zestaw kodu, który wybrałem, zaczął się od:

#include <DS1307RTC.h> 

Drugi zestaw kodu, który próbowałem połączyć, nie zawierał tego „include”, ale zamiast tego został użyty

RTC_DS1307 RTC; 

jak znaleziono tutaj:

https://learn.adafruit.com/ds1307-real-time-clock-breakout-board-kit/understanding-the-code

Jako początkujący programista nie jestem pewien, jaka jest różnica między powyższymi dwoma sposobami wywoływania tej biblioteki. Ale znam pierwszy sposób użycia „include”, jeśli chcę uzyskać dostęp do aktualnego czasu w RTC, używam

RTC.get(); 

w przeciwieństwie do drugiej metody co wymaga:

RTC.now(); 

I chociaż łatwo było znaleźć dokumentację dotyczącą synchronizacji czasu RTC z komputerem za pomocą kabla USB, używając tego przydatnego fragmentu kodu:

// 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 } 

Nie mogę znaleźć łatwej alternatywy przy użyciu „#include DS1307RTC”

Najpierw pomyślałem, że różnica między RTC.now () a RTC .get () było tylko kwestią podstawiania słów. Ale później, gdy chcę użyć wywołania „time_t” po zainicjowaniu z „RTC_DS1307 RTC;”

 time_t timeNOW = RTC.now(); 

Otrzymuję błąd „nie można przekonwertować„ DateTime ” do „time_t {aka long unsigned int}” w inicjalizacji ”

Zakładam więc, że jedna metoda używa„ DateTime ”, a jedna metoda używa„ time_t ”. Ale nie jestem pewien, czy tak jest a jeśli tak, jak przekonwertować wartość „DateTime” na wartość „time_t”.

Pisząc ten post mam dwa cele.

1 – Czy ktoś może wyjaśnić różnica między „#include DS1307RTC.h” a „RTC_DS1307 RTC;” i jaki ma to wpływ na mój kod.

2- Chciałbym pozostać przy używaniu „” RTC_DS1307 RTC; „tylko dlatego, że wydaje mi się, że synchronizacja mojego RTC z komputerem jest łatwa. Ale jeśli tak, pojawia się powyższy błąd. Czy ktoś może mi powiedzieć, jak przekonwertować wywołanie „RTC now ()” na wartość „time_t”? A może problem jest bardziej skomplikowany niż zwykła konwersja między typami danych?

Odpowiedź

A DateTime to pełna klasa z wieloma metodami – time_t to po prostu długość bez znaku.

time_t służy do przechowywania liczby sekund, które upłynęły od epoki (zwykle 01/01/1970)

Biblioteka Arduino Time zwraca time_t do funkcji now() – ale RTCLib zwraca jako obiekt DateTime.

Jednak obiekt DateTime ma unixtime(), która zwróci time_t reprezentację czasu zapisanego w obiekcie DateTime.

Możesz więc zrobić :

DateTime dt = RTC.now(); time_t time = dt.unixtime(); 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *