Accueil > ARDUINO > Arduino & Horloge DS3231 (RTC = Real Time Clock)
dimanche 18 décembre 2016, par
J’utilise la bibliothèque "ds3231" développée par Petre Rodan https://github.com/rodan/ds3231 sous licence GPL.
Les variables concernant la date et l’heure sont déclarées sous la forme d’un type struct dans cette bibliothèque :
struct ts { uint8_t sec; /* seconds */ uint8_t min; /* minutes */ uint8_t hour; /* hours */ uint8_t mday; /* day of the month */ uint8_t mon; /* month */ int16_t year; /* year */ uint8_t wday; /* day of the week */ uint8_t yday; /* day in the year */ uint8_t isdst; /* daylight saving time */ uint8_t year_s; /* year in short notation*/ #ifdef CONFIG_UNIXTIME uint32_t unixtime; /* seconds since 01.01.1970 00:00:00 UTC*/ #endif };
Ainsi, dans les programmes suivants : , on déclare une variable t de type struct ts :
struct ts t
.
Si on veut faire référence à la variable minute de l’heure (hh:mm), on utilisera la variable t.min.
Les fonctions que l’on utilise :
Nom de la fonction | description | |
---|---|---|
DS3231_init(DS3231_INTCN) | initialise le module DS3231 | |
DS3231_set(t) | mettre à l’heure/date le module | |
DS3231_get(&t) | lire la date et l’heure |
Lire la date et l’heure.
#include <Wire.h> #include <ds3231.h> struct ts t; void setup() { Serial.begin(9600); Wire.begin(); DS3231_init(DS3231_INTCN); } void loop() { // put your main code here, to run repeatedly: DS3231_get(&t); Serial.print("date : "); Serial.print(t.mday); Serial.print("/"); Serial.print(t.mon); Serial.print("/"); Serial.print(t.year); Serial.print("\t Heure : "); Serial.print(t.hour); Serial.print(":"); Serial.print(t.min); Serial.print("."); Serial.println(t.sec); delay(500); }
Si on ouvre le moniteur série (loupe en haut à droite), on obtient :
REMARQUE : si on vient de mettre la pile dans le module, alors il ne sera pas l’heure, ni à la bonne date. Il va donc falloir le programmer.
Régler l’heure et la date
Le programme suivant permet de régler le module suivant les paramètres donnés dans la fonction void setup() . A chaque fois que l’on relance le programme (téléversement ou reset) il configure à nouveau le module et ré-initialise l’heure et la date.
#include <Wire.h> #include <ds3231.h> struct ts t; //déclaration variable t void setup() { Serial.begin(9600); Wire.begin(); DS3231_init(DS3231_INTCN); t.hour=12; // données pour mettre à l'heure l'horloge t.min=22; t.sec=0; t.mday=18; t.mon=12; t.year=2016; DS3231_set(t); // mise à l'heure de l'horloge } void loop() { // put your main code here, to run repeatedly: DS3231_get(&t); Serial.print("date : "); Serial.print(t.mday); Serial.print("/"); Serial.print(t.mon); Serial.print("/"); Serial.print(t.year); Serial.print("\t Heure : "); Serial.print(t.hour); Serial.print(":"); Serial.print(t.min); Serial.print("."); Serial.println(t.sec); delay(500); }