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