j ai mis des lcd.clear dans mes bouton le retour et instantané maintenant par contre quand je rentre dans mon menu la température de la deuxième ligne reste affiché et des que je me déplace dans le menu ou sous menu elle disparait
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#include <OneWire.h>
// DS18S20 Temperature chip i/o
OneWire ds(10); // on pin 10
byte addr1[8] = {0x28, 0xAA, 0x98, 0x12, 0x3C, 0x14, 0x01, 0xD7};
byte addr2[8] = {0x28, 0xAA, 0xC1, 0x91, 0x3B, 0x14, 0x01, 0x9A};
int SignBit = 0;
int StartCol = 8;
bool afficherMenu = false;
bool temperatureLimite = false;
int ventilo = 6;
int sonde = 7;
int relais = 1;
int Tmin = 20;
int Tmax= 25;
int Hmin = 20;
int Hmax = 25;
int heure = 1;
int minute = 1;
int unsigned Menu = 0;
int unsigned SousMenu = 0;
double Tempo = millis();
double Tempo2 = 0;
int test1 = 0;
int test2 = 0;
int test3 = 0;
int SELECT = A0;
int UP = A1;
int LEFT = A3;
int HOME = A4;
typedef struct {
String Menu;
}
TypeMenu;
TypeMenu NumMenu[100];
void Initialisation() {
NumMenu[10] = (TypeMenu) {
"1. Info General "
};
NumMenu[11] = (TypeMenu) {
"Temp Nid:" +String(Tmin)
};
NumMenu[12] = (TypeMenu) {
"Temp ADC:" +String(Tmax)
};
NumMenu[13] = (TypeMenu) {
"Humidite" +String(Tmax)
};
NumMenu[20] = (TypeMenu) {
"2. Temperature"
};
NumMenu[21] = (TypeMenu) {
"Temp Min " +String(Tmin) + " c"
};
NumMenu[22] = (TypeMenu) {
"Temp Max " +String(Tmax) + " c"
};
NumMenu[30] = (TypeMenu) {
"3. Humidite"
};
NumMenu[31] = (TypeMenu) {
"Humid Min " +String(Hmin) + "%"
};
NumMenu[32] = (TypeMenu) {
"Humid Max " +String(Hmax) + "%"
};
NumMenu[40] = (TypeMenu) {
"4. Heure"
};
NumMenu[41] = (TypeMenu) {
"4.1 Reglage"
};
NumMenu[42] = (TypeMenu) {
"4.2 Reglage heure"
};
}
void setup() {
pinMode(ventilo, OUTPUT);
pinMode(sonde, OUTPUT);
pinMode(relais, OUTPUT);
Serial.begin(9600);
Initialisation();
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp NID:");;
lcd.setCursor(0, 1);
lcd.print("Temp ADC:");
delay(2000);
pinMode(SELECT, INPUT_PULLUP);
pinMode(UP, INPUT_PULLUP);
pinMode(LEFT, INPUT_PULLUP);
pinMode(HOME, INPUT_PULLUP);
}
void loop() {
Sondes();
Regul();
humi();
heurefunc();
bouton();
}
void bouton() {
if ( millis() > Tempo ) {
if (digitalRead(LEFT) == LOW) { /* Bouton LEFT */
lcd.clear();
afficherMenu = true; // <-- ici
SousMenu++;
Tempo = millis() + 250;
AfficheMenu();
} else if (digitalRead(UP) == LOW) { /* Bouton Up */
lcd.clear();
afficherMenu = true; // <-- ici
Menu = Menu + 10;
Tempo = millis() + 250;
SousMenu = 0;
AfficheMenu();
} else if (digitalRead(SELECT) == LOW) { /* Bouton Select */
afficherMenu = true; // <-- et ici
Tempo = millis() + 750;
switch (Menu + SousMenu) {
case 21 :
if(Tmin <= 29){
Tmin = Tmin + 1;
}
else {
Tmin = 5;
}
if(Tmin >= Tmax) {
Tmax = Tmin + 1;
Serial.print("Tmax");
Serial.println(Tmax);
NumMenu[22] = (TypeMenu) {
"Temp Max " +String(Tmax) + " c"
};
}
NumMenu[21] = (TypeMenu) {
"Temp Min " +String(Tmin) + " c"
};
Serial.print("Tmin");
Serial.println(Tmin);
delay(200);
break;
case 22 :
if ((Tmax > Tmin)&&(Tmax <= 30)){
Tmax = Tmax + 1;
}
else {
Tmax = Tmin + 1;
NumMenu[21] = (TypeMenu) {
"Temp Min " +String(Tmin) + " c"
};
}
NumMenu[22] = (TypeMenu) {
"Temp Max " +String(Tmax) + " c"
};
Serial.print("Tmax");
Serial.println(Tmax);
delay(200);
break;
case 31 :
if ((Hmax > Hmin)&&(Hmin <= 99)){
Hmin = Hmin + 1;
}
else {
Hmin = 5;
}
if(Hmin >= Hmax) {
Hmax = Hmin + 5;
NumMenu[32] = (TypeMenu) {
"Humid Max " +String(Hmax) + " %"
};
Serial.print("Hmax");
Serial.println(Hmax);
}
NumMenu[31] = (TypeMenu) {
"Humid Min " +String(Hmin) + " %"
};
Serial.print("Hmin");
Serial.println(Hmin);
delay(200);
break;
case 32 :
if ((Hmax > Hmin)&&(Hmax <= 99)){
Hmax = Hmax + 1;
}
else {
Hmax = Hmin + 1;
NumMenu[31] = (TypeMenu) {
"Humid Min " +String(Hmin) + " %"
};
}
NumMenu[32] = (TypeMenu) {
"Humid Max " +String(Hmax) + " %"
};
Serial.print("Hmax");
Serial.println(Hmax);
delay(200);
break;
case 41 :
;
case 42 :
;
}
AfficheMenu();
}
}
}
void AfficheMenu() {
if (Menu == 0 ) {
Menu = 40;
}
if (Menu == 50 ) {
Menu = 10;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(NumMenu[Menu].Menu);
lcd.setCursor(0, 1);
if ( SousMenu < 0 ) {
SousMenu = 0;
}
if (NumMenu[Menu + SousMenu].Menu == "") {
SousMenu = 0;
}
if (Menu + SousMenu > Menu) {
lcd.print(NumMenu[Menu + SousMenu].Menu);
}
}
void Regul() {
if (test1 == 1) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temperature Mini");
lcd.setCursor(0, 1);
lcd.print(Hmin);
}
}
void humi() {
if (test2 > 0) {
if ((digitalRead(test2)) == HIGH) {
Serial.print("action on test2");
}
if ((digitalRead(test2)) == LOW) {
Serial.print("action off test2");
}
}
}
void heurefunc() {
if (test3 > 0) {
if ((digitalRead(test3)) == HIGH) {
Serial.print("action on test3");
}
if ((digitalRead(test3)) == LOW) {
Serial.print("action off test3");
}
}
}
// sonde temperature
int tc_100(byte* addr){
int HighByte, LowByte, TReading;
byte data[12];
byte i;
ds.reset();
ds.select(addr);
ds.write(0x44,1); // start conversion, with parasite power on at the end
unsigned long chrono = millis();
while (millis()-chrono < 1000ul) {
// lecture des boutons et traitement si menu
bouton();
}
ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
for ( i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
}
LowByte = data[0];
HighByte = data[1];
TReading = (HighByte << 8) + LowByte;
SignBit = TReading & 0x8000; // test most sig bit
if (SignBit) // negative
{
TReading = (TReading ^ 0xffff) + 1; // 2's comp
}
return (6 * TReading) + TReading / 4; // multiply by (100 * 0.0625) or 6.25
}
void mypr(int Tc_100, int line) {
int Whole, Fract;
Whole = Tc_100 / 100; // separate off the whole and fractional portions
Fract = Tc_100 % 100;
if (SignBit) // If its negative
{
lcd.setCursor(StartCol,line);
lcd.print("-");
}
lcd.setCursor(StartCol+1,line);
lcd.print(Whole);
lcd.print(".");
if (Fract < 10)
{
lcd.print("0");
}
lcd.print(Fract);
lcd.print("C");
}
void Sondes() {
if (!afficherMenu) {
mypr(tc_100(addr1),0);
mypr(tc_100(addr2),1);
} else if (digitalRead(HOME) == LOW) { /* Bouton Select */
afficherMenu = false;
Tempo = millis() + 750;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp NID:");;
lcd.setCursor(0, 1);
lcd.print("Temp ADC:");
}
}