Bonjour,
je déterre mon sujet car j'ai un peu de temps pour résoudre ce problème. J'ai réduit le code à sa plus simple expression en gardant la partie incriminée.
Tout fonctionne très bien jusqu'à la version 1.13 de la RTClib d'Adafruit. L'heure et la date s'affichent correctement sur le lcd.
Dès que je mets à jour la librairie de 1.14 jusqu'à 2.01, plus rien de s'affiche sur l'écran. Aucun avertissement à la compilation et le téléversement se déroule normalement.
Ci-dessous le dessin Fritzing de l'ensemble.
Le code :
#include <RTClib.h>
#include <OneWire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Variables et broches pour la RTC DS3231 & la gestion du temps
RTC_DS3231 rtc; // Pour DS3231
int aaaa, mm, jj, jourSemaine, hh, mn, sec;
char jourDeLaSemaine[7][4] = {"Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"};
char moisDeLAnnee[12][9] = {"Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembr", "Octobre", "Novembr", "Decembr"};
// Variables pour le programme
int heureProg; // variable Heure pour programme: Hx100 + minutes
int jdM;
const int interval2 = 5000; const int interval3 = 11000;
const int interval4 = 20000;
unsigned long dureeAffich;
int etatAlarmeChauffage = 0; int etatAffich = 0;
void setup() {
lcd.begin();
Serial.begin(115200);
//if (rtc.lostPower()) {
//rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // régle la date et l'heure automatiquement au moment de la complation
//}
//rtc.adjust(DateTime(2021, 11, 17, 14, 59, 0)); // régle la date et l'heure définie par l'utilisateur
}
void loop() {
// Calcul heureProg
DateTime now = rtc.now();
aaaa = now.year(); mm = now.month() - 1;
jj = now.day(); jourSemaine = now.dayOfTheWeek();
hh = now.hour(); mn = now.minute(); sec = now.second();
// Affichage de la date et de l'heure en alternance sur la premiére ligne du lcd
// Affichage de la date, de l'heure et des températures
// Affichage 1 : date, eclairage led et temp rtc ou air ou eau
{
if (millis() - dureeAffich < interval2) {
if (!etatAlarmeChauffage) {
affichDate();
}
}
// Affichage 2 : heure, eclairage PP , Sec et temp rtc ou air ou eau
if ((millis() - dureeAffich >= interval2) && (millis() - dureeAffich < interval3)) {
if (!etatAlarmeChauffage) {
affichHeure();
}
}
// Affichage 3 : heure, eclairage PP, Sec et temp rtc ou air ou eau
if ((millis() - dureeAffich >= interval3) && (millis() - dureeAffich < interval4)) {
if (etatAlarmeChauffage == 0) {
affichHeure();
}
}
if (millis() - dureeAffich >= interval4) {
dureeAffich = millis();
}
}
}
// Affichage de l'heure et de la date
void affichHeure() {
lcd.setCursor(0, 0); lcd.print(" ");
if (hh < 10) {
lcd.print(" ");
}
lcd.print(hh);
lcd.print(":");
if ((mn) < 10) {
lcd.print("0");
}
lcd.print(mn);
lcd.print(":");
if (sec < 10) {
lcd.print("0");
}
lcd.print(sec); lcd.print(" ");
}
void affichDate() {
lcd.setCursor(0, 0); lcd.print(jourDeLaSemaine[jourSemaine]); lcd.print(" ");
lcd.print(jj); lcd.print(" ");
lcd.print(moisDeLAnnee[mm]); lcd.print(" "); lcd.print(aaaa);
}
si quelqu'un a une petite idée, cela m'aiderait bien
Merci