Eu tive um problema ao tentar combinar 2 projetos de cronômetro Arduino diferentes que encontrei online.
Para ambos os projetos, estou usando um RTC DS3231, mas consigo usar a biblioteca DS1307 perfeitamente no meu código.
O primeiro conjunto de código que peguei começou com:
#include <DS1307RTC.h>
O segundo conjunto de código que tentei combinar não tinha esse “incluir”, mas usava
RTC_DS1307 RTC;
conforme encontrado aqui:
https://learn.adafruit.com/ds1307-real-time-clock-breakout-board-kit/understanding-the-code
Como um programador novato, não tenho certeza de qual é a diferença entre as duas maneiras acima de chamar esta biblioteca. Mas eu conheço a primeira maneira de usar “incluir”, se eu quiser acessar a hora atual no RTC, eu uso
RTC.get();
em vez do segundo método que requer:
RTC.now();
E embora fosse fácil encontrar documentação para sincronizar o RTC com a hora do computador pelo cabo USB usando este código útil:
// 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 }
Não consigo encontrar nenhuma alternativa fácil usando “#include DS1307RTC”
Primeiro pensei que a diferença entre RTC.now () e RTC .get () era apenas uma questão de substituição de palavras. Mas mais tarde, quando eu quiser usar uma chamada “time_t” após inicializar com “RTC_DS1307 RTC;”
time_t timeNOW = RTC.now();
Recebo o erro “não é possível converter” DateTime ” para “time_t {aka long unsigned int}” na inicialização “
Então, estou assumindo que um método usa” DateTime “e outro método usa” time_t “. Mas não tenho certeza se esse é o caso , e em caso afirmativo, como converter um valor “DateTime” em um valor “time_t”.
Tenho dois objetivos ao escrever esta postagem.
1- Alguém pode explicar para me a diferença entre “#include DS1307RTC.h” e “RTC_DS1307 RTC;” e como isso afeta meu código.
2- Eu “gostaria de continuar usando” “RTC_DS1307 RTC;”, apenas porque parece fácil sincronizar meu RTC com meu computador. Mas se eu fizer isso, obtenho o erro acima. Então, alguém pode me dizer como converter uma chamada “RTC now ()” em um valor “time_t”? Ou o problema é mais complicado do que apenas uma simples conversão entre os tipos de dados?
Resposta
A DateTime
é uma classe completa com muitos métodos – um time_t
é apenas um comprimento sem sinal.
time_t
é usado para armazenar o número de segundos desde a época (normalmente 01/01/1970)
A biblioteca Arduino Tempo retorna um time_t
para a função now()
– mas RTCLib retorna um objeto DateTime.
O objeto DateTime, no entanto, tem um unixtime()
método que retornará uma time_t
representação da hora armazenada no objeto DateTime.
Então você pode fazer :
DateTime dt = RTC.now(); time_t time = dt.unixtime();