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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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