Bonjour,
Je suis bloqué dans mon projet avec une apparente incompatibilité.
J'ai besoin d'une interruption toutes les minutes pour effectuer la procédure « Ecriture() »
J'utilise la librairie https://playground.arduino.cc/Main/MsTimer2
MsTimer2::set(60000, Ecriture);
Cela fonctionne très bien, merci.
J'y ai besoin de la date et heure et j'ai donc une horloge RTC DS3231.
J'ai une fonction qui fait merveille :
1 2 3 4
| void DateHeure() {
DateTime now = rtc.now();
sprintf (cDate, "%02d/%02d/%04d %02d:%02d:%02d", now.day(), now.month(), now.year(), now.hour(), now.minute(), now.second());
} |
Elle place l'heure dans « char cDate[20]; » définie en haut.
Mais quand je fais fonctionner les deux ensemble, l'Arduino plante et se fige.
Le code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| // ########################################################################
// RTC - horloge
#include <Wire.h> //include Wire.h library
#include "RTClib.h" //include Adafruit RTC library
RTC_DS3231 rtc; //Make a RTC DS3231 object
// ########################################################################
// ########################################################################
// Gestion de l'interruption du Timer 2 pour l'écriture du tableau toutes les minutes
// https://playground.arduino.cc/Main/MsTimer2
#include <MsTimer2.h>
// ########################################################################
char cDate[20]; //date et heure textuelle complète jj/mm/aaaa hh:mm:ss
void setup() {
Serial.begin(115200);//make it fast so it dumps quick!
//========== RTC
//Print the message if RTC is not available
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
//Setup of time if RTC lost power or time is not set
if (rtc.lostPower()) {
//Sets the code compilation time to RTC DS3231
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
} //==========
//============= Interruption Timer2
MsTimer2::set(10000, Ecriture); // Toutes les 10000 ms (10 secondes) lance la procédure Ecriture
MsTimer2::start(); // Démarre le processus
//==============
DateHeure();
Serial.println(cDate);
}
void loop() {
}
void DateHeure() {
DateTime now = rtc.now();
sprintf (cDate, "%02d/%02d/%04d %02d:%02d:%02d", now.day(), now.month(), now.year(), now.hour(), now.minute(), now.second());
}
void Ecriture() {
DateHeure();
Serial.println(cDate);
Serial.println("Toto");
} |
À vous lire
Partager