Forskjellen mellom “ time_t ” og “ DateTime ”

Jeg har fått problemer med å prøve å kombinere to forskjellige Arduino timer-prosjekter jeg har funnet online.

For begge prosjektene bruker jeg en DS3231 RTC, men har kunnet bruke DS1307-biblioteket helt fint i koden min.

Det første settet med kode jeg hentet startet med:

#include <DS1307RTC.h> 

Det andre kodesettet jeg prøvde å kombinere hadde ikke dette «include», men ble i stedet brukt

RTC_DS1307 RTC; 

som funnet her:

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

Som nybegynnerkoder er jeg ikke helt sikker på hva forskjellen er mellom de to ovennevnte måtene å kalle dette biblioteket på. Men jeg vet den første måten å bruke «inkluderer», hvis jeg vil ha tilgang til den aktuelle tiden på RTC, bruker jeg

RTC.get(); 

i motsetning til den andre metoden som krever:

RTC.now(); 

Og selv om det var lett å finne dokumentasjon for å synkronisere RTC til datatid over USB-kabelen ved hjelp av denne praktiske koden:

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

Jeg kan ikke finne noe enkelt alternativ ved å bruke «#include DS1307RTC»

Jeg trodde først at forskjellen mellom RTC.now () og RTC .get () var bare et spørsmål om ordutskiftning. Men senere når jeg vil bruke et «time_t» -anrop etter initialisering med «RTC_DS1307 RTC;»

 time_t timeNOW = RTC.now(); 

får jeg feilen «kan ikke konvertere» DateTime » til «time_t {aka long unsigned int}» i initialisering «

Så jeg antar at en metode bruker» DateTime «og en metode bruker» time_t «. Men jeg er ikke sikker på om dette er tilfelle , og i så fall hvordan konvertere en «DateTime» -verdi til en «time_t» -verdi.

Jeg har to mål når jeg skriver dette innlegget.

1- Kan noen forklare til meg forskjellen mellom «#include DS1307RTC.h» og «RTC_DS1307 RTC;» og hvordan den påvirker koden min.

2- Jeg vil holde meg med å bruke «» RTC_DS1307 RTC; «, bare fordi det virker enkelt å synkronisere RTC med datamaskinen min. Men hvis jeg gjør det, får jeg feilen ovenfor. Så kan noen fortelle meg hvordan jeg konverterer et «RTC now ()» -anrop til en «time_t» -verdi? Eller er problemet mer komplisert enn bare en konvertering mellom datatyper?

Svar

A DateTime er en full klasse med mange metoder for det – en time_t er bare en usignert lang.

time_t brukes til å lagre antall sekunder siden epoken (normalt 01/01/1970)

Arduino Time -biblioteket returnerer en time_t til now() -funksjonen – men RTCLib returnerer et DateTime-objekt.

DateTime-objektet har imidlertid et unixtime() metode som returnerer en time_t representasjon av tiden som er lagret i DateTime-objektet.

Så du kan gjøre :

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

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *