#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// Initialisation de l'écran LCD (adresse I2C 0x27, 16 colonnes, 2 lignes)
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Configuration du capteur DHT22
#define DHTPIN 2 // Pin connectée au signal du DHT22
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Pin du buzzer
#define BUZZERPIN 8
#define BP 9
// Seuils de température
float seuilTemperature = 30.0;
void setup() {
// Initialisation de la communication série
Serial.begin(9600);
// Initialisation de l'écran LCD
lcd.begin(16, 2);
lcd.backlight();
// Initialisation du capteur DHT
dht.begin();
// Configuration de la broche du buzzer et de boutton poussoir
pinMode(BUZZERPIN, OUTPUT);
pinMode(BP, INPUT_PULLUP);
digitalWrite(BUZZERPIN, LOW);
// Message initial sur le LCD
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.setCursor(0, 1);
lcd.print("Seuil: ");
lcd.print(seuilTemperature);
lcd.print("C");
Serial.println("Configuration initiale:");
Serial.println("Entrez un nouveau seuil de temp. en utilisant le Serial Monitor.");
}
void loop() {
// Lecture de la température et de l'humidité
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Gestion des erreurs de lecture
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Erreur de lecture du capteur DHT22");
return;
}
// Mise à jour de l'écran LCD
lcd.setCursor(6, 0);
lcd.print(temperature);
lcd.print(" C ");
lcd.setCursor(0, 1);
lcd.print("Hum: ");
lcd.print(humidity);
lcd.print("% "); // Ajout d'espaces pour effacer les caractères restants
// Alarme sonore si la température dépasse le seuil
if (temperature > seuilTemperature) {
//digitalWrite(BUZZERPIN, HIGH);
tone(BUZZERPIN, 1000); // 1000 Hz
} else {
noTone(BUZZERPIN); // Arrêter le son
}
// Lecture des entrées du Serial Monitor pour configurer le seuil
if (Serial.available() > 0) {
String input = Serial.readStringUntil('\n');
seuilTemperature = input.toFloat();
lcd.setCursor(0, 1);
lcd.print("Seuil: ");
lcd.print(seuilTemperature);
lcd.print("C "); // Ajout d'espaces pour effacer les caractères restants
Serial.print("Nouveau seuil configuré: ");
Serial.println(seuilTemperature);
}
if(digitalRead(BP)==LOW){
seuilTemperature = 30.0;
Serial.print("seuil réinstialisé: ");
Serial.println(seuilTemperature);
Serial.print("Entrez un nouveau seuil de temp. en utilisant le Serial Monitor.");
delay(100);
}
delay(100); // Délai de 2 secondes entre les lectures
}