La différence entre “ time_t ” et “ DateHeure ”

Jai rencontré un problème en essayant de combiner 2 projets de minuterie Arduino différents que jai trouvés en ligne.

Pour les deux projets, jutilise un DS3231 RTC, mais jai pu utiliser la bibliothèque DS1307 très bien dans mon code.

Le premier ensemble de code que jai choisi a commencé avec:

#include <DS1307RTC.h> 

Le deuxième ensemble de code que jai essayé de combiner navait pas cet « include », mais à la place utilisé

RTC_DS1307 RTC; 

comme trouvé ici:

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

En tant que codeur novice, je ne sais pas vraiment quelle est la différence entre les deux façons ci-dessus dappeler cette bibliothèque. Mais je connais la première façon dutiliser « include », si je veux accéder à lheure actuelle sur le RTC, jutilise

RTC.get(); 

par opposition à la deuxième méthode ce qui nécessite:

RTC.now(); 

Et sil était facile de trouver de la documentation pour synchroniser le RTC avec lheure de lordinateur via le câble USB en utilisant ce petit code pratique:

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

Je ne trouve pas dalternative facile en utilisant « #include DS1307RTC »

Jai dabord pensé que la différence entre RTC.now () et RTC .get () était juste une question de substitution de mots. Mais plus tard, lorsque je veux utiliser un appel « time_t » après linitialisation avec « RTC_DS1307 RTC; »

 time_t timeNOW = RTC.now(); 

Jobtiens lerreur « impossible de convertir » DateTime  » à « time_t {aka long unsigned int} » lors de linitialisation « 

Donc je » suppose quune méthode utilise « DateTime » et une méthode utilise « time_t ». Mais je ne suis pas sûr que ce soit le cas , et si oui, comment convertir une valeur « DateTime » en une valeur « time_t ».

Jai deux objectifs en écrivant ce post.

1- Quelquun peut-il expliquer à moi la différence entre « #include DS1307RTC.h » et « RTC_DS1307 RTC; » et son impact sur mon code.

2- Je « voudrais continuer à utiliser » « RTC_DS1307 RTC; », uniquement parce quil semble facile de synchroniser mon RTC avec mon ordinateur. Mais si je le fais, jobtiens lerreur ci-dessus. Quelquun peut-il donc me dire comment convertir un appel « RTC now () » en une valeur « time_t »? Ou le problème est-il plus compliqué quune simple conversion entre les types de données?

Réponse

A DateTime est une classe complète avec beaucoup de méthodes – un time_t est juste un long non signé.

time_t est utilisé pour stocker le nombre de secondes depuis epoch (normalement 01/01/1970)

La bibliothèque Arduino Time renvoie un time_t à la fonction now() – mais RTCLib renvoie un objet DateTime.

Lobjet DateTime, cependant, a un unixtime() méthode qui renverra une time_t représentation de lheure stockée dans lobjet DateTime.

Vous pouvez donc faire :

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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *