#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// Initialisation des composants
#define DHTPIN 5 // Broche de connexion du DHT22
#define DHTTYPE DHT22 // Type de capteur
#define BUZZER_PIN 7 // Broche du buzzer
#define BUTTON_PIN 8 // Bouton poussoir
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Adresse I2C de l'écran LCD
// Variables globales
float temperature = 0.0;
float humidity = 0.0;
int alertThreshold = 20; // Seuil d'alerte par défaut
bool buzzerActive = false;
void setup() {
// Initialisation des composants
pinMode(BUZZER_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
lcd.init();
lcd.backlight();
dht.begin();
Serial.println("dht22_test.ino");
Serial.println();
Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)\tTime (us)");
Serial.begin(9600);
lcd.setCursor(0, 0);
lcd.print("Initialisation...");
delay(2000);
lcd.clear();
lcd.print("Temp & Humidite");
}
void loop() {
// Lecture des données du capteur
temperature = dht.readTemperature();
humidity = dht.readHumidity();
// Interface utilisateur via Serial Monitor
if (Serial.available() > 0) {
Serial.println("donner le nouveau seuil");
String input = Serial.readStringUntil('\n');
int newThreshold = input.toInt();
if (newThreshold > 0) {
alertThreshold = newThreshold;
Serial.print("Nouveau seuil: ");
Serial.println(alertThreshold);
lcd.setCursor(0, 1);
lcd.print("Seuil: ");
lcd.print(alertThreshold);
lcd.print((char)223);
lcd.print("C ");
delay(2000);
}
}
// Affichage sur l'écran LCD
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print((char)223); // Symbole de degré
lcd.print("C ");
lcd.setCursor(0, 1);
lcd.print("Hum: ");
lcd.print(humidity);
lcd.print("% ");
// Gestion de l'alarme
if (temperature > alertThreshold) {
if (!buzzerActive) {
tone(BUZZER_PIN, 1000); // Active le buzzer
buzzerActive = true;
}
} else {
noTone(BUZZER_PIN); // Désactive le buzzer
buzzerActive = false;
}
// Vérification du bouton poussoir
if (digitalRead(BUTTON_PIN) == LOW) {
noTone(BUZZER_PIN);
buzzerActive = false;
lcd.setCursor(0, 1);
lcd.print("Alerte reset ");
delay(2000);
}
delay(1000); // Pause pour éviter un rafraîchissement trop rapide
}