Rozdíl mezi “ time_t ” a “ DateTime ”

Narazil jsem na problém, který se pokoušel zkombinovat 2 různé projekty časovače Arduino, které jsem našel online.

U obou projektů používám DS3231 RTC, ale v mém kódu jsem mohl použít knihovnu DS1307.

První sada kódu, kterou jsem zachytil, začala:

#include <DS1307RTC.h> 

Druhá sada kódu, kterou jsem se pokusil zkombinovat, neměla tento „include“, ale místo toho byla použita

RTC_DS1307 RTC; 

jak je zde nalezeno:

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

Jako začínající kodér si nejsem úplně jistý, jaký je rozdíl mezi výše uvedenými dvěma způsoby, jak tuto knihovnu nazvat. Ale znám první způsob pomocí „include“, pokud chci získat přístup k aktuálnímu času v RTC, používám

RTC.get(); 

na rozdíl od druhé metody což vyžaduje:

RTC.now(); 

A zatímco bylo snadné najít dokumentaci k synchronizaci RTC s časem počítače pomocí kabelu USB pomocí tohoto šikovného kódu:

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

Nemohu najít snadnou alternativu pomocí „#include DS1307RTC“

Nejprve jsem si myslel, že rozdíl mezi RTC.now () a RTC .get () bylo jen otázkou nahrazení slov. Ale později, když chci použít volání „time_t“ po inicializaci pomocí „RTC_DS1307 RTC;“

 time_t timeNOW = RTC.now(); 

Zobrazuje se mi chyba „nelze převést“ DateTime “ na „time_t {aka long unsigned int}“ při inicializaci „

Takže předpokládám, že jedna metoda používá“ DateTime „a jedna metoda používá“ time_t „. Ale nejsem si jistý, jestli je tomu tak , a pokud ano, jak převést hodnotu „DateTime“ na hodnotu „time_t“.

Při psaní tohoto příspěvku mám dva cíle.

1- Může mi někdo prosím vysvětlit mě rozdíl mezi „#include DS1307RTC.h“ a „RTC_DS1307 RTC;“ a jak to ovlivní můj kód.

2- Rád bych zůstal při používání „“ RTC_DS1307 RTC; “, jen proto, že se zdá snadné synchronizovat můj RTC s mým počítačem. Ale pokud ano, dostanu výše uvedenou chybu. Může mi někdo prosím říct, jak převést volání „RTC now ()“ na hodnotu „time_t“? Nebo je problém složitější než pouhá konverze mezi datovými typy?

Odpověď

A DateTime je úplná třída se spoustou metod – time_t je pouze nepodepsaný dlouhý.

time_t slouží k uložení počtu sekund od epochy (obvykle 1. 1. 1970)

Knihovna Arduino Time vrací time_t do funkce now() – ale RTCLib vrátí objekt DateTime.

Objekt DateTime však má unixtime() metoda, která vrátí time_t reprezentaci času uloženého v objektu DateTime.

Takže můžete udělat :

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

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *