A diferença entre “ time_t ” e “ DateTime ”

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

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *