#include <Wire.h> // Bibliothèque pour la communication I2C
#include <LiquidCrystal_I2C.h> // Bibliothèque pour le LCD avec I2C
#include <RTClib.h> // Bibliothèque pour le DS1307 (RTC)
// Définir l'adresse I2C de l'écran LCD (souvent 0x27 ou 0x3F)
LiquidCrystal_I2C lcd(0x27, 16, 2); // Adresse I2C, 16 colonnes, 2 lignes
RTC_DS1307 rtc; // Créer une instance pour l'horloge DS1307
void setup() {
// Initialisation de la communication série
Serial.begin(9600);
// Initialisation du LCD
lcd.begin(16, 2); // 16 colonnes, 2 lignes
lcd.backlight(); // Allumer le rétroéclairage du LCD
// Initialiser l'horloge RTC DS1307
if (!rtc.begin()) {
lcd.print("RTC non trouve !");
while (1); // Bloquer si le RTC ne répond pas
}
// Vérifier si le RTC est bien configuré
if (!rtc.isrunning()) {
lcd.print("RTC ne fonctionne pas");
while (1); // Bloquer si le RTC ne fonctionne pas
}
// Si vous souhaitez configurer l'heure au départ, décommentez cette ligne :
// rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Régle l'heure à la date de compilation du code
}
void loop() {
// Lire l'heure actuelle depuis le DS1307
DateTime now = rtc.now();
// Effacer l'écran LCD avant chaque nouvelle mise à jour
lcd.clear();
// Afficher l'heure, les minutes et les secondes sur la première ligne
lcd.setCursor(0, 0); // Positionner le curseur sur la première ligne
lcd.print(now.hour(), DEC); // Afficher l'heure
lcd.print(":");
if (now.minute() < 10) lcd.print("0"); // Ajouter un zéro avant les minutes si nécessaire
lcd.print(now.minute(), DEC); // Afficher les minutes
lcd.print(":");
if (now.second() < 10) lcd.print("0"); // Ajouter un zéro avant les secondes si nécessaire
lcd.print(now.second(), DEC); // Afficher les secondes
// Laisser la deuxième ligne vide (le code ici n'affiche rien sur la deuxième ligne)
lcd.setCursor(0, 1); // Positionner le curseur sur la deuxième ligne
lcd.print(" "); // Remplir la ligne avec des espaces vides
delay(1000); // Attendre 1 seconde avant de mettre à jour l'heure
}