Het verschil tussen “ time_t ” en “ DateTime ”

Ik ben een probleem tegengekomen bij het combineren van 2 verschillende Arduino-timerprojecten die ik online heb gevonden.

Voor beide projecten gebruik ik een DS3231 RTC, maar ik heb de DS1307-bibliotheek prima kunnen gebruiken in mijn code.

De eerste set code die ik oppikte begon met:

#include <DS1307RTC.h> 

De tweede set code die ik probeerde te combineren, had deze “include” niet, maar gebruikte in plaats daarvan

RTC_DS1307 RTC; 

zoals hier gevonden:

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

Als beginnende coder weet ik niet precies wat het verschil is tussen de bovenstaande twee manieren om deze bibliotheek te noemen. Maar ik ken de eerste manier om “include” te gebruiken, als ik toegang wil tot de huidige tijd op de RTC die ik gebruik

RTC.get(); 

in tegenstelling tot de tweede methode waarvoor vereist is:

RTC.now(); 

En hoewel het gemakkelijk was om documentatie te vinden om de RTC naar computertijd te synchroniseren via de USB-kabel met behulp van dit handige stukje code:

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

Ik kan geen gemakkelijk alternatief vinden met “#include DS1307RTC”

Ik dacht eerst dat het verschil tussen RTC.now () en RTC .get () was gewoon een kwestie van woordvervanging. Maar als ik later een “time_t” -oproep wil gebruiken na initialisatie met “RTC_DS1307 RTC;”

 time_t timeNOW = RTC.now(); 

krijg ik de fout “kan” DateTime “niet converteren naar “time_t {aka long unsigned int}” in initialisatie “

Dus ik” neem aan dat de ene methode “DateTime” gebruikt en de andere methode “time_t”. Maar ik weet niet zeker of dit het geval is , en zo ja, hoe je een “DateTime” -waarde converteert naar een “time_t” -waarde.

Ik heb twee doelen bij het schrijven van dit bericht.

1- Kan iemand alsjeblieft uitleggen mij het verschil tussen “#include DS1307RTC.h” en “RTC_DS1307 RTC;” en hoe het mijn code beïnvloedt.

2- Ik “blijf graag” “RTC_DS1307 RTC;” gebruiken, alleen omdat het gemakkelijk lijkt om mijn RTC met mijn computer te synchroniseren. Maar als ik dat doe, krijg ik de bovenstaande foutmelding. Kan iemand me alsjeblieft vertellen hoe ik een “RTC now ()” -oproep kan converteren naar een “time_t” -waarde? Of is het probleem ingewikkelder dan alleen een conversie tussen gegevenstypen?

Antwoord

A DateTime is een volledige klasse met veel methoden – een time_t is slechts een niet-ondertekende long.

time_t wordt gebruikt om het aantal seconden op te slaan sinds het epoch (normaal 01/01/1970)

De Arduino Time bibliotheek geeft een time_t naar de functie now() – maar RTCLib retourneert een DateTime-object.

Het DateTime-object heeft echter een unixtime() methode die een time_t representatie teruggeeft van de tijd die is opgeslagen in het DateTime-object.

Dus je kunt doen :

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

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *