#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include <DHT.h>
RTC_DS1307 rtc;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Initialise l'afficheur LCD avec une adresse I2C et une taille de 16x2
#define DHTPIN 3
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
float previousTemp = -999.0; // Température précédente initialisée à une valeur improbable
DateTime previousDateTime; // Date et heure précédentes
void setup() {
Serial.begin(9600);
lcd.init(); // Initialise l'afficheur LCD
lcd.backlight(); // Allume le rétroéclairage de l'afficheur LCD
if (!rtc.begin()) {
lcd.print("RTC NON FONC.");
while (1); // Boucle infinie si le module RTC n'est pas trouvé
}
if (!rtc.isrunning()) {
lcd.print("RTC non fonctionnel");
}
dht.begin(); // Initialise le capteur DHT22
}
void loop() {
DateTime now = rtc.now();
// Lecture de la température et de l'humidité du capteur DHT22
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Vérifie si la température a changé depuis la dernière fois
if (temperature != previousTemp) {
lcd.clear(); // Efface l'écran LCD
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print((int)temperature); // Affiche la température en tant qu'entier
lcd.print(" C");
// Affiche la date et l'heure actuelles
lcd.setCursor(0, 1);
lcd.print("Date: ");
lcd.print(now.year(), DEC);
lcd.print('/');
lcd.print(now.month(), DEC);
lcd.print('/');
lcd.print(now.day(), DEC);
lcd.print(" ");
// Affiche le jour de la semaine
switch (now.dayOfTheWeek()) {
case 0: lcd.print("Dim"); break;
case 1: lcd.print("Lun"); break;
case 2: lcd.print("Mar"); break;
case 3: lcd.print("Mer"); break;
case 4: lcd.print("Jeu"); break;
case 5: lcd.print("Ven"); break;
case 6: lcd.print("Sam"); break;
}
lcd.print(" ");
// Affiche l'heure
lcd.print(now.hour(), DEC);
lcd.print(":");
lcd.print(now.minute(), DEC);
lcd.print(":");
lcd.print(now.second(), DEC);
// Met à jour la température précédente
previousTemp = temperature;
}
delay(1000); // Attente d'une seconde entre les lectures
}