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();