#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Configuration pour PCF8574 - Adresses communes: 0x27, 0x3F, 0x20, 0x38
LiquidCrystal_I2C lcd(0x27, 16, 2); // Adresse, colonnes, lignes
const int DS18B20_PIN = A0;
const int LED_PIN = 8;
const float TEMP_SEUIL = 30.0;
float temperature;
bool alarmeActive = false;
void setup() {
// Initialisation série
Serial.begin(9600);
Serial.println("Systeme LM35 + LCD PCF8574");
Serial.println("==========================");
// Configuration LED
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
// Initialisation LCD avec PCF8574
initialiserLCD();
// Message de démarrage
afficherMessageDebut();
}
void initialiserLCD() {
// Initialiser le LCD
lcd.init();
// Activer le rétroéclairage
lcd.backlight();
// Test d'affichage
//lcd.setCursor(0, 0);
//lcd.print("PCF8574 LCD OK");
//lcd.setCursor(0, 1);
//lcd.print("Adresse: 0x27");
//Serial.println("LCD PCF8574 initialise");
//Serial.println("Adresse: 0x27");
//delay(2000);
// lcd.clear();
}
//
void loop() {
// Lecture température
temperature = lireTemperatureDS18B20();
// Contrôle alarme
if (temperature > TEMP_SEUIL) {
activerAlarme();
} else {
desactiverAlarme();
}
// Affichage
afficherSurLCD();
afficherSurSerie();
delay(1000);
}
float lireTemperatureDS18B20() {
int valeurAnalogique = analogRead(DS18B20_PIN);
float tension = valeurAnalogique * (5.0 / 1023.0);
float temp = tension * 100.0;
return temp;
}
void activerAlarme() {
digitalWrite(LED_PIN, HIGH);
alarmeActive = true;
}
void desactiverAlarme() {
digitalWrite(LED_PIN, LOW);
alarmeActive = false;
}
void afficherSurLCD() {
lcd.clear();
// Première ligne
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature, 1);
lcd.print(" C");
// Deuxième ligne
lcd.setCursor(0, 1);
if (alarmeActive) {
lcd.print("ALARME! >30C");
} else {
lcd.print("Normal");
}
}
void afficherSurSerie() {
Serial.print("DS18B20: ");
Serial.print(temperature, 1);
Serial.print("C | LED: ");
Serial.print(alarmeActive ? "ON" : "OFF");
Serial.print(" | Seuil: ");
Serial.print(TEMP_SEUIL, 0);
Serial.println("C");
}
void afficherMessageDebut() {
lcd.setCursor(0, 0);
lcd.print(" SYSTEME DS18B20");
lcd.setCursor(0, 1);
lcd.print(" LCD PCF8574");
delay(2000);
lcd.clear();
}