A “ time_t ” és a “ DateTime ”

Problémába ütköztem, és megpróbáltam összekapcsolni 2 különböző Arduino időzítő projektet, amelyeket online találtam.

Mindkét projektnél használok egy DS3231 RTC-t, de a DS1307 könyvtárat nagyon jól használhatom a kódomban.

Az első általam előállított kódkészlet a következővel kezdődött:

#include <DS1307RTC.h> 

A második kódkészletben, amelyet megpróbáltam kombinálni, nem volt ez az “include”, hanem a következőt használta:

RTC_DS1307 RTC; 

itt található:

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

Kezdő kódolóként nem igazán tudom, mi a különbség a fenti két módszer között, hogy ezt a könyvtárat hívjuk. De ismerem az “include” használatának első módját, ha meg akarom érni az aktuális időt az RTC-n, amelyet használok

RTC.get(); 

a második módszerrel szemben amihez szükséges:

RTC.now(); 

És bár könnyű volt megtalálni a dokumentációt az RTC és a számítógép idő közötti szinkronizálására az USB-kábel segítségével a következő praktikus kód segítségével:

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

Nem találok egyszerű alternatívát a “#include DS1307RTC” használatával

Először arra gondoltam, hogy az RTC.now () és az RTC közötti különbség A .get () csak szócsere kérdése volt. De később, amikor egy “time_t” hívást akarok használni, miután inicializáltam az “RTC_DS1307 RTC;” -t.

 time_t timeNOW = RTC.now(); 

A hibát kapom “time_t {aka long unsigned int}” -re inicializáláskor “

Tehát azt feltételezem, hogy egy módszer a” DateTime “-et, az egyik pedig az” time_t “-et használja. De nem vagyok biztos benne, hogy ez a helyzet , és ha igen, hogyan lehet a “DateTime” értéket átalakítani “time_t” értékre.

Két célom van a bejegyzés megírásakor.

1 – Tudna valaki magyarázatot nekem a “#include DS1307RTC.h” és az “RTC_DS1307 RTC” közötti különbség; és hogyan befolyásolja a kódomat.

2- Szeretnék ragaszkodni az “” RTC_DS1307 RTC; “használatához, csak azért, mert úgy tűnik, hogy egyszerű szinkronizálni az RTC-t a számítógéppel. De ha mégis megteszem, akkor a fenti hibát kapom. Tehát valaki meg tudná mondani, hogyan lehet az “RTC now ()” hívást átalakítani “time_t” értékre? Vagy a kérdés bonyolultabb, mint pusztán az adattípusok közötti átalakítás?

Válasz

A DateTime egy teljes osztály, rengeteg módszerrel – a time_t csak előjel nélküli hosszú.

time_t a korszak (általában 1970.01.01.) óta eltelt másodpercek tárolására szolgál.

Az Arduino Time könyvtár egy time_t a now() függvénybe – de az RTCLib visszaadja a DateTime objektumot.

A DateTime objektumnak azonban van unixtime() metódus, amely a DateTime objektumban tárolt idő time_t ábrázolását adja vissza.

Tehát megteheti :

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

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük