Olen törmännyt ongelmaan, joka yrittää yhdistää kahta erilaista Arduino-ajastinprojektia, jotka olen löytänyt verkosta.
Molemmissa projekteissa käytän DS3231 RTC: tä, mutta olen voinut käyttää DS1307-kirjastoa hienosti koodissani.
Ensimmäinen valitsemani koodisarja alkoi:
#include <DS1307RTC.h>
Toisessa koodisarjassa, jota yritin yhdistää, ei ollut tätä ”include”, vaan käytin sen sijaan
RTC_DS1307 RTC;
kuten täältä löytyy:
https://learn.adafruit.com/ds1307-real-time-clock-breakout-board-kit/understanding-the-code
Aloittelijana koodaajana en ole oikeastaan varma, mikä ero näiden kahden edellä mainitun tapan välillä kutsua tätä kirjastoa. Mutta tiedän ensimmäisen tavan käyttää ”sisällytä” -toimintoa, jos haluan käyttää nykyistä aikaa RTC: llä, jota käytän
RTC.get();
toisen menetelmän sijaan joka vaatii:
RTC.now();
Ja vaikka oli helppoa löytää dokumentaatio RTC: n synkronoimiseksi tietokoneen ajan kanssa USB-kaapelin kautta käyttämällä tätä kätevää koodia:
// 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 }
En löydä helppoa vaihtoehtoa käytettäessä ”#include DS1307RTC”
Ajattelin ensin, että ero RTC.now (): n ja RTC: n välillä .get () oli vain kysymys sanan korvaamisesta. Mutta myöhemmin, kun haluan käyttää ”time_t” -puhelua aloituksen jälkeen ”RTC_DS1307 RTC;”
time_t timeNOW = RTC.now();
Saan virheen ”ei voi muuntaa” DateTime ” kohtaan ”time_t {aka pitkä allekirjoittamaton int}” alustuksessa ”
Joten oletan, että yksi menetelmä käyttää” DateTime ”ja yksi menetelmä” time_t ”. Mutta en ole varma, onko näin , ja jos on, kuinka muuntaa ”DateTime” -arvo ”time_t” -arvoksi.
Minulla on kaksi tavoitetta kirjoittaessani tätä viestiä.
1 – Voisiko joku selittää minulle ”#include DS1307RTC.h” ja ”RTC_DS1307 RTC” välinen ero; ja miten se vaikuttaa koodiini.
2- Haluaisin pitää kiinni ”” RTC_DS1307 RTC; ”-käytöstä vain siksi, että näyttää olevan helppo synkronoida RTC tietokoneelleni. Mutta jos teen, saan yllä olevan virheen. Joten voiko joku kertoa minulle, kuinka muuntaa ”RTC now ()” -kutsu ”time_t” -arvoksi? Vai onko ongelma monimutkaisempi kuin pelkkä muuntaminen tietotyyppien välillä?
Vastaa
A DateTime
on kokoluokka, jolla on paljon menetelmiä – time_t
on vain allekirjoittamaton pitkä.
time_t
käytetään sekuntien määrän tallentamiseen aikakauden jälkeen (yleensä 01.01.1970).
Arduino Time -kirjasto palauttaa time_t
funktioon now()
– mutta RTCLib palauttaa päivämäärä-objektin.
DateTime-objektilla on kuitenkin unixtime()
-menetelmä, joka palauttaa time_t
-esityksen DateTime-objektiin tallennetusta ajasta.
Joten voit tehdä :
DateTime dt = RTC.now(); time_t time = dt.unixtime();