Ero “ time_t ” ja “ DateTime ”

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

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *