/*
* ============================================================
* TEST UNIQUEMENT DE L'AFFICHEUR LCD
* Mini-usine Hwevi Agro Nutri
* ============================================================
*/
// ============================================================
// BIBLIOTHÈQUES
// ============================================================
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// ============================================================
// OBJETS
// ============================================================
LiquidCrystal_I2C lcd(0x27, 20, 4); // Adresse I2C 0x27, 20 caractères x 4 lignes
// ============================================================
// STRUCTURE POUR LES MESURES
// ============================================================
struct MesuresCircuit {
float tension; // Volts
float courant; // Ampères
float puissance; // Watts
float puissReactive; // VAR
float facteurPui; // cos φ
float frequence; // Hz
float energie; // kWh
bool valide;
};
// ============================================================
// VARIABLES POUR SIMULATION
// ============================================================
MesuresCircuit eclairage, malaxeur, extL1, extL2, extL3;
float puissanceTotaleExtrudeuse = 0.0;
float energieTotaleExtrudeuse = 0.0;
uint8_t pageLCD = 0;
unsigned long dernierChangementPage = 0;
unsigned long dernierAffichage = 0;
// ============================================================
// DONNÉES SIMULÉES POUR LE TEST
// ============================================================
void initialiserDonneesSimulees() {
// Simulation circuit éclairage
eclairage.tension = 220.5;
eclairage.courant = 2.3;
eclairage.puissance = 506.0;
eclairage.puissReactive = 120.5;
eclairage.facteurPui = 0.95;
eclairage.frequence = 50.0;
eclairage.energie = 125.5;
eclairage.valide = true;
// Simulation circuit malaxeur
malaxeur.tension = 218.3;
malaxeur.courant = 5.2;
malaxeur.puissance = 1135.0;
malaxeur.puissReactive = 250.8;
malaxeur.facteurPui = 0.88;
malaxeur.frequence = 49.8;
malaxeur.energie = 342.7;
malaxeur.valide = true;
// Simulation extrudeuse L1
extL1.tension = 219.8;
extL1.courant = 8.5;
extL1.puissance = 1870.0;
extL1.puissReactive = 380.2;
extL1.facteurPui = 0.92;
extL1.frequence = 50.1;
extL1.energie = 156.3;
extL1.valide = true;
// Simulation extrudeuse L2
extL2.tension = 220.1;
extL2.courant = 8.7;
extL2.puissance = 1914.0;
extL2.puissReactive = 395.6;
extL2.facteurPui = 0.91;
extL2.frequence = 50.0;
extL2.energie = 158.9;
extL2.valide = true;
// Simulation extrudeuse L3
extL3.tension = 219.5;
extL3.courant = 8.3;
extL3.puissance = 1822.0;
extL3.puissReactive = 370.8;
extL3.facteurPui = 0.93;
extL3.frequence = 49.9;
extL3.energie = 153.7;
extL3.valide = true;
// Calcul extrusion
puissanceTotaleExtrudeuse = extL1.puissance + extL2.puissance + extL3.puissance;
energieTotaleExtrudeuse = extL1.energie + extL2.energie + extL3.energie;
}
// ============================================================
// SETUP
// ============================================================
void setup() {
Serial.begin(115200);
Serial.println(F("=== TEST AFFICHEUR LCD ==="));
// Initialisation I2C
Wire.begin(21, 22); // ESP32: SDA=21, SCL=22
// Initialisation LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(F("Hwevi Agro Nutri"));
lcd.setCursor(0, 1);
lcd.print(F("Test LCD..."));
Serial.println(F("LCD initialise"));
// Initialiser les données simulées
initialiserDonneesSimulees();
delay(2000);
lcd.clear();
Serial.println(F("=== SYSTEME PRET ==="));
Serial.println(F("Changement de page toutes les 5 secondes"));
}
// ============================================================
// LOOP PRINCIPAL
// ============================================================
void loop() {
afficherLCD();
// Changement de page toutes les 5 secondes
if (millis() - dernierChangementPage >= 5000) {
pageLCD = (pageLCD + 1) % 3;
dernierChangementPage = millis();
lcd.clear();
}
delay(100); // Petit délai pour stabilité
}
// ============================================================
// AFFICHAGE LCD
// ============================================================
void afficherLCD() {
switch (pageLCD) {
case 0: { // Page Éclairage
lcd.setCursor(0, 0);
lcd.print(F("=== ECLAIRAGE ==="));
lcd.setCursor(0, 1);
lcd.print(F("U:"));
lcd.print(eclairage.tension, 0);
lcd.print(F("V I:"));
lcd.print(eclairage.courant, 1);
lcd.print(F("A"));
lcd.setCursor(0, 2);
lcd.print(F("P:"));
lcd.print(eclairage.puissance, 0);
lcd.print(F("W Q:"));
lcd.print(eclairage.puissReactive, 0);
lcd.print(F("VAR"));
lcd.setCursor(0, 3);
lcd.print(F("f:"));
lcd.print(eclairage.frequence, 1);
lcd.print(F("Hz E:"));
lcd.print(eclairage.energie, 1);
lcd.print(F("kWh"));
break;
}
case 1: { // Page Malaxeur
lcd.setCursor(0, 0);
lcd.print(F("== MALAXEUR/CONV ="));
lcd.setCursor(0, 1);
lcd.print(F("U:"));
lcd.print(malaxeur.tension, 0);
lcd.print(F("V I:"));
lcd.print(malaxeur.courant, 1);
lcd.print(F("A"));
lcd.setCursor(0, 2);
lcd.print(F("P:"));
lcd.print(malaxeur.puissance, 0);
lcd.print(F("W cos:"));
lcd.print(malaxeur.facteurPui, 2);
lcd.setCursor(0, 3);
lcd.print(F("f:"));
lcd.print(malaxeur.frequence, 1);
lcd.print(F("Hz E:"));
lcd.print(malaxeur.energie, 1);
lcd.print(F("kWh"));
break;
}
case 2: { // Page Extrudeuse
lcd.setCursor(0, 0);
lcd.print(F("=== EXTRUDEUSE ==="));
lcd.setCursor(0, 1);
lcd.print(F("P tot:"));
lcd.print(puissanceTotaleExtrudeuse, 0);
lcd.print(F("W"));
lcd.setCursor(0, 2);
float cosMoy = (extL1.facteurPui + extL2.facteurPui + extL3.facteurPui) / 3.0;
lcd.print(F("cos phi moy:"));
lcd.print(cosMoy, 2);
lcd.setCursor(0, 3);
lcd.print(F("E tot:"));
lcd.print(energieTotaleExtrudeuse, 1);
lcd.print(F("kWh"));
break;
}
}
}