besoin d'aide pour un menu,

Tu peux essayer d'afficher un truc comme ça

NumMenu[21]+"........." +String(variable)

Où 'variable' contient ta valeur 25

  NumMenu[21] = (TypeMenu) {
    "Temp Mini " +String(Tmin) + ('\xB0') + "c"
  };

un grand merci pour ton aide j ai régler mon soucie par contre quand j incrémente ma variable de la manière suivant dans le Serial.print elle se met bien a jour met pas dans mon menu y a t il un moyen de remédier a cela ?

      case 21 :
          Serial.print("Temp Min");
          if(Tmin <= 30){
            Tmin = Tmin + 1;
          }
          else {
            Tmin = 5;
          }
          Serial.print(Tmin);
          break;

Il faut ajouter après ton Serial.print la ligne de mise à jour de ton menu: NumMenu[21] =...

encore merci pour ton aide. j'ai teste se que tu ma dit mais j ai pas du tout comprendre ^^ j'ai mis sa

     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);
          }
          Serial.print("Tmin");
          Serial.println(Tmin);
          NumMenu[21] = (TypeMenu) {
            "Temp Mini " +String(Tmin) + ('\xB0') + "c"
            };
          break;

Oui, c'est bien que ce que je voulais dire : il faut mettre ton menu à jour après avoir calculé la nouvelle valeur de Tmin. Si tu as des problèmes de compilation, ajoute des accolades autour de ton bloc 'case' :

    switch (Menu + SousMenu) {
     case 21 :
        {    <-- ici
         if(Tmin <= 29){
 ... blablabla ...
         break;
        }    <-- et là

ma compilation se passe bien mais mon menu ne se met pas a jour :confused: jte met mon code complet j'ai surement couiller ailleurs

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int ventilo = 6;
int sonde = 7;
int relais = 8;
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 DOWN = A2;
int LEFT = A3;
int RIGHT = A4;



typedef struct {
  String Menu;
}

TypeMenu;
TypeMenu NumMenu[100];

void Initialisation() {
  NumMenu[10] = (TypeMenu) {
    "1. Home "
  };
  NumMenu[20] = (TypeMenu) {
    "2. Temperature"
  };
  NumMenu[21] = (TypeMenu) {
    "Temp Mini " +String(Tmin) + ('\xB0') + "c"
  };
  NumMenu[22] = (TypeMenu) {
    "Temp Max " +String(Tmax) + ('\xB0') + "c"
  };
  NumMenu[30] = (TypeMenu) {
    "3. Humiditer"
  };
  NumMenu[31] = (TypeMenu) {
    "3.1 H min "
  };
  NumMenu[32] = (TypeMenu) {
    "3.2 H max"
  };
  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("  * TUTORIEL *  ");
  lcd.setCursor(0, 1);
  lcd.print(Tmax);
  delay(2000);
  
  pinMode(SELECT, INPUT_PULLUP);
  pinMode(UP, INPUT_PULLUP);
  pinMode(DOWN, INPUT_PULLUP);
  pinMode(LEFT, INPUT_PULLUP);
  pinMode(RIGHT, INPUT_PULLUP);
}



void loop() {
  Regul();
  humi();
  heurefunc();
  bouton();
}


void bouton() {
  if ( millis() > Tempo ) {
    if (digitalRead(LEFT) == LOW) { /* Bouton LEFT  */
      SousMenu++;
      Tempo = millis() + 250;
      AfficheMenu();
    } else if (digitalRead(DOWN) == LOW) { /* Bouton Down  */
      Menu = Menu - 10;
      Tempo = millis() + 250;
      SousMenu = 0 ;
      AfficheMenu();
    } else if (digitalRead(UP) == LOW) { /* Bouton Up */
      Menu = Menu + 10;
      Tempo = millis() + 250;
      SousMenu = 0;
      AfficheMenu();
    } else if (digitalRead(RIGHT) == LOW) { /* Bouton RIGHT  */
      SousMenu--;
      Tempo = millis() + 250;
      AfficheMenu();
    } else if (digitalRead(SELECT) == LOW) { /* Bouton Select */
      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);
          }
          Serial.print("Tmin");
          Serial.println(Tmin);
          delay(200);
          break;
          NumMenu[21] = (TypeMenu) {
          "Temp Mini " +String(Tmin) + ('\xB0') + "c"
          };

      case 22 :
          if ((Tmax > Tmin)&&(Tmax <= 30)){
            Tmax = Tmax + 1;
          }
          else {
            Tmax = Tmin + 1;
          }
          Serial.print("Tmax");
          Serial.println(Tmax);
          delay(200);
          break;
          
      case 31 :
          if(Hmin <= 99){
            Hmin = Hmin + 1;
          }
          else {
            Hmin = 5;
          }
          if(Hmin >= Hmax) {
            Hmax = Hmin + 1;
            Serial.print("Hmax");
            Serial.println(Hmax);
          }
          Serial.print("Hmin");
          Serial.println(Hmin);
          delay(200);
          break;

      case 32 :
          if ((Hmax > Hmin)&&(Hmax <= 99)){
            Hmax = Hmax + 1;
          }
          else {
            Hmax = Hmin + 1;
          }
          Serial.print("Hmax");
          Serial.println(Hmax);
          delay(200);
          break;

      case 41 :
          ;
      case 42 :
          ;
      }
    }
  }
}

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");
    }
  }
}

Normal, le break te fait sortir de la poule euh non, du case :

         break;
         NumMenu[21] = (TypeMenu) {
         "Temp Mini " +String(Tmin) + ('\xB0') + "c"
         };

il faut mettre le break après la mise à jour du menu.

Au passage, je ne sais pas si ton + ('\xB0') te permettra effectivement d'afficher le caractère °, ça peut dépendre de la police utilisée par la bibliothèque du LCD. Si tu ne vois pas le caractère, tu auras intérêt à ôter ce + ('\xB0')

edit : ah je vient de voir qu il se met a jour quand je navigue dans les sous menu est-il possible qu il se mette a jour en direct sans avoir besoin de switch. on avance on avance :smiley: :smiley: :wink:

effectivement pour le caractère il ne m affiche pas le bon il me met - au lieux de ° par contre mème quand je met avent le break je n 'est pas la mise a jour de mon menu. le code modifié

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int ventilo = 6;
int sonde = 7;
int relais = 8;
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 DOWN = A2;
int LEFT = A3;
int RIGHT = A4;



typedef struct {
  String Menu;
}

TypeMenu;
TypeMenu NumMenu[100];

void Initialisation() {
  NumMenu[10] = (TypeMenu) {
    "1. Home "
  };
  NumMenu[20] = (TypeMenu) {
    "2. Temperature"
  };
  NumMenu[21] = (TypeMenu) {
    "Temp Mini " +String(Tmin) + ('\xB0') + "c"
  };
  NumMenu[22] = (TypeMenu) {
    "Temp Max " +String(Tmax) + ('\xB0') + "c"
  };
  NumMenu[30] = (TypeMenu) {
    "3. Humiditer"
  };
  NumMenu[31] = (TypeMenu) {
    "3.1 H min "
  };
  NumMenu[32] = (TypeMenu) {
    "3.2 H max"
  };
  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("  * TUTORIEL *  ");
  lcd.setCursor(0, 1);
  lcd.print(Tmax);
  delay(2000);
  
  pinMode(SELECT, INPUT_PULLUP);
  pinMode(UP, INPUT_PULLUP);
  pinMode(DOWN, INPUT_PULLUP);
  pinMode(LEFT, INPUT_PULLUP);
  pinMode(RIGHT, INPUT_PULLUP);
}



void loop() {
  Regul();
  humi();
  heurefunc();
  bouton();
}


void bouton() {
  if ( millis() > Tempo ) {
    if (digitalRead(LEFT) == LOW) { /* Bouton LEFT  */
      SousMenu++;
      Tempo = millis() + 250;
      AfficheMenu();
    } else if (digitalRead(DOWN) == LOW) { /* Bouton Down  */
      Menu = Menu - 10;
      Tempo = millis() + 250;
      SousMenu = 0 ;
      AfficheMenu();
    } else if (digitalRead(UP) == LOW) { /* Bouton Up */
      Menu = Menu + 10;
      Tempo = millis() + 250;
      SousMenu = 0;
      AfficheMenu();
    } else if (digitalRead(RIGHT) == LOW) { /* Bouton RIGHT  */
      SousMenu--;
      Tempo = millis() + 250;
      AfficheMenu();
    } else if (digitalRead(SELECT) == LOW) { /* Bouton Select */
      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[21] = (TypeMenu) {
          "Temp Mini " +String(Tmin) + ('\xB0') + "c"
          };
          Serial.print("Tmin");
          Serial.println(Tmin);
          delay(200);
          break;
      }
      case 22 :
          if ((Tmax > Tmin)&&(Tmax <= 30)){
            Tmax = Tmax + 1;
          }
          else {
            Tmax = Tmin + 1;
          }
          Serial.print("Tmax");
          Serial.println(Tmax);
          delay(200);
          break;
          
      case 31 :
          if(Hmin <= 99){
            Hmin = Hmin + 1;
          }
          else {
            Hmin = 5;
          }
          if(Hmin >= Hmax) {
            Hmax = Hmin + 1;
            Serial.print("Hmax");
            Serial.println(Hmax);
          }
          Serial.print("Hmin");
          Serial.println(Hmin);
          delay(200);
          break;

      case 32 :
          if ((Hmax > Hmin)&&(Hmax <= 99)){
            Hmax = Hmax + 1;
          }
          else {
            Hmax = Hmin + 1;
          }
          Serial.print("Hmax");
          Serial.println(Hmax);
          delay(200);
          break;

      case 41 :
          ;
      case 42 :
          ;
      }
    }
  }
}

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");
    }
  }
}

C'est parce que tu n'affiches pas le menu après avoir appuyé sur le bouton SELECT : ajoute AfficheMenu(); après l'accolade fermante } à la fin de ton switch

Comme tu dois afficher le menu après chaque cas de test des boutons, tu peux aussi bien l'enlever de chaque bloc if des boutons et le mettre à la fin du bloc if ( millis() > Tempo ) { (juste avant l'accolade fermante)

edit; ah tu veux dire que je peut retirer de chaque bouton AfficheMenu(); je comprend nikel

sa marche :wink: :wink: :wink: :smiley: :smiley: :smiley:

tu cartonne !!! j ai passer une bonne partie de mon weekend dessus

par contre j ai pas trop compris ou et comment tu veut que je mette

if ( millis() > Tempo ) { (juste avant l'accolade fermante)

code modifier

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int ventilo = 6;
int sonde = 7;
int relais = 8;
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 DOWN = A2;
int LEFT = A3;
int RIGHT = A4;



typedef struct {
  String Menu;
}

TypeMenu;
TypeMenu NumMenu[100];

void Initialisation() {
  NumMenu[10] = (TypeMenu) {
    "1. Home "
  };
  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. Humiditer"
  };
  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("  * TUTORIEL *  ");
  lcd.setCursor(0, 1);
  lcd.print(Tmax);
  delay(2000);
  
  pinMode(SELECT, INPUT_PULLUP);
  pinMode(UP, INPUT_PULLUP);
  pinMode(DOWN, INPUT_PULLUP);
  pinMode(LEFT, INPUT_PULLUP);
  pinMode(RIGHT, INPUT_PULLUP);
}



void loop() {
  Regul();
  humi();
  heurefunc();
  bouton();
}


void bouton() {
  if ( millis() > Tempo ) {
    if (digitalRead(LEFT) == LOW) { /* Bouton LEFT  */
      SousMenu++;
      Tempo = millis() + 250;
    } else if (digitalRead(DOWN) == LOW) { /* Bouton Down  */
      Menu = Menu - 10;
      Tempo = millis() + 250;
      SousMenu = 0 ;
    } else if (digitalRead(UP) == LOW) { /* Bouton Up */
      Menu = Menu + 10;
      Tempo = millis() + 250;
      SousMenu = 0;
    } else if (digitalRead(RIGHT) == LOW) { /* Bouton RIGHT  */
      SousMenu--;
      Tempo = millis() + 250;
    } else if (digitalRead(SELECT) == LOW) { /* Bouton Select */
      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");
    }
  }
}

Au lieu de ça

     case 42 :
         ;
     }
   }
 }
 AfficheMenu();  // <-- pas ici
}

je pensais à ça

     case 42 :
         ;
     }
   }
   AfficheMenu();  // <-- un cran plus haut
 }
}

Ce n'est pas une grosse différence, mais ça ne rafraîchit l'affichage que quand tu as des modifs (c'est à dire quand tu entres dans le if ( millis() > Tempo ) { ). Le code sera plus réactif (car le rafraîchissement du LCD peut prendre du temps) ce qui est bien pour les boutons, et ça évitera le clignotement du LCD

parfait tout marche reste pas loin de se post ;D ;D ;D je v surement avoir plein plein d’autre question mais sinon encore merci pour ton aide

No problem, moi ou un autre...

comme ta pu le remarquer je début et j ai deux code actuellement et je comprend pas tout un avec mon menu et l autre avec mes sonde qui mesure chaque une un point de température. les deux code séparer fonctionne bien j arrive a les fusionner mais j'ai des soucie ma température se retrouve afficher tout le temps et écrie pardessus mon menu .

en faite je voudrais que

en 1 : quand je lance l Arduino mais mes température de sonde s affiche pour sa c'est ok
en 2 : quand j’appuie mon menu s'affiche mais sans afficher les sonde
en 3: je voudrai que dans mon premier menu il y est un sous menu qui me permet de revenir a l affichage général

code du menu que l on a fait ensemble

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int ventilo = 6;
int sonde = 7;
int relais = 8;
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 DOWN = A2;
int LEFT = A3;
int RIGHT = 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("  * TUTORIEL *  ");
  lcd.setCursor(0, 1);
  lcd.print(Tmax);
  delay(2000);
  
  pinMode(SELECT, INPUT_PULLUP);
  pinMode(UP, INPUT_PULLUP);
  pinMode(DOWN, INPUT_PULLUP);
  pinMode(LEFT, INPUT_PULLUP);
  pinMode(RIGHT, INPUT_PULLUP);
}



void loop() {
  Regul();
  humi();
  heurefunc();
  bouton();
}


void bouton() {
  if ( millis() > Tempo ) {
    if (digitalRead(LEFT) == LOW) { /* Bouton LEFT  */
      SousMenu++;
      Tempo = millis() + 250;
      AfficheMenu();
    } else if (digitalRead(DOWN) == LOW) { /* Bouton Down  */
      Menu = Menu - 10;
      Tempo = millis() + 250;
      SousMenu = 0 ;
      AfficheMenu();
    } else if (digitalRead(UP) == LOW) { /* Bouton Up */
      Menu = Menu + 10;
      Tempo = millis() + 250;
      SousMenu = 0;
      AfficheMenu();
    } else if (digitalRead(RIGHT) == LOW) { /* Bouton RIGHT  */
      SousMenu--;
      Tempo = millis() + 250;
      AfficheMenu();
    } else if (digitalRead(SELECT) == LOW) { /* Bouton Select */
      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");
    }
  }
}

code de mais deux sonde

#include <LiquidCrystal.h>
#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;

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup()
{
  Serial.begin(9600);
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("Temp NID:");
  lcd.setCursor(0, 1);
  lcd.print("Temp ADC:");
}

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

  delay(1000);     // maybe 750ms is enough, maybe not
  // we might do a ds.depower() here, but the reset will take care of it.

  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 loop()
{
  byte i;
  byte data[12];
  int Tc_100;

  Tc_100 = tc_100(addr1);
  mypr(Tc_100,0);

  Tc_100 = tc_100(addr2);
  mypr(Tc_100,1);
}

je met ma tentative de fusion dans le prochain post car je depasse les 9000 characters

Est ce que vous pouvez definir une variable qui vaut, disons, vrai si un menu est actif, faux si on a demandé un affichage?
En plus, data ne sert à rien dans votre loop() du second mort sot.

ma tentative de fusion des deux code

#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;

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 DOWN = A2;
int LEFT = A3;
int RIGHT = 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(DOWN, INPUT_PULLUP);
  pinMode(LEFT, INPUT_PULLUP);
  pinMode(RIGHT, INPUT_PULLUP);
}



void loop() {
  Sondes();
  Regul();
  humi();
  heurefunc();
  bouton();
}


void bouton() {
  if ( millis() > Tempo ) {
    if (digitalRead(LEFT) == LOW) { /* Bouton LEFT  */
      SousMenu++;
      Tempo = millis() + 250;
      AfficheMenu();
    } else if (digitalRead(DOWN) == LOW) { /* Bouton Down  */
      Menu = Menu - 10;
      Tempo = millis() + 250;
      SousMenu = 0 ;
      AfficheMenu();
    } else if (digitalRead(UP) == LOW) { /* Bouton Up */
      Menu = Menu + 10;
      Tempo = millis() + 250;
      SousMenu = 0;
      AfficheMenu();
    } else if (digitalRead(RIGHT) == LOW) { /* Bouton RIGHT  */
      SousMenu--;
      Tempo = millis() + 250;
      AfficheMenu();
    } else if (digitalRead(SELECT) == LOW) { /* Bouton Select */
      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

  delay(1000);     // maybe 750ms is enough, maybe not
  // we might do a ds.depower() here, but the reset will take care of it.

  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()
{
  byte i;
  byte data[12];
  int Tc_100;

  Tc_100 = tc_100(addr1);
  mypr(Tc_100,0);

  Tc_100 = tc_100(addr2);
  mypr(Tc_100,1);
}

dbrion06:
Est ce que vous pouvez definir une variable qui vaut, disons, vrai si un menu est actif, faux si on a demandé un affichage?
En plus, data ne sert à rien dans votre loop() du second mort sot.

je v t avouai ne pas y connaitre grand chose

tu veux dire avec une

variable = 1 sa active le menu
variable = 0 sa active le menu

je voie le principe mais pas vraiment comment faire

void Sondes()
{
byte i;
byte data[12];
int Tc_100;

Tc_100 = tc_100(addr1);
mypr(Tc_100,0);

Tc_100 = tc_100(addr2);
mypr(Tc_100,1);
}
peut se reécrire (plus concis; sera plus facile à maintenir à therme)
en

void Sondes() {
  mypr(tc_100(addr1), 0);

  mypr(tc_100(addr2),1);
}

Oui c'est en effet comme ça que tu peux faire. Ce genre de variable peut être fait avec un type bool : c'est un booléen qui ne peut prendre comme valeurs que true ou false (ce sont des raccourcis pour 1 et 0).
Tu peux faire comme ça :

bool afficheMenu = true;
...
if (afficheMenu) {
 //  les instructions liées au menu
} else {
 // les autres instructions d'affichage
}

Pour compléter ce que propose dbrion06, en regardant la fonction de lecture des sondes, je vois que tu mets un delay(1000) : chaque lecture prend donc une seconde. Pour 2 lectures, ça fait deux secondes et pendant ce temps, le code ne fait RIEN DU TOUT. C'est bloquant : si tu appuies sur un bouton pendant ces 2 secondes, l'appui ne sera pas pris en compte !

Donc, première solution : lire les 2 sondes dans la même fonction. Ça te permet de réduire de 2 à 1 seconde, mais le résultat sera pratiquement le même.

Autre solution, écrire un code non bloquant pour lire les sondes. Pas facile sans chambouler complètement la structure du code actuel. Le plus simple serait de tirer parti de ce temps d'attente pour lire les boutons. Au lieu de

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

  delay(1000);     // maybe 750ms is enough, maybe not
  // we might do a ds.depower() here, but the reset will take care of it.

  ds.reset();
  ds.select(addr);    
  ds.write(0xBE);         // Read Scratchpad
...

tu peux changer le delay(1000) en

unsigned long chrono = millis();
while (millis()-chrono < 1000ul) {
    // lecture des boutons et traitement si menu
    bouton();
}

parfait mon menu et redevenu fluide

la le dernier soucie c toujours ma température qui s affiche partout sur mes menu

il faudrait que quand j active le menu je désactive l affichage de met sonde met uniquement l affichage que le contrôle se face en tache de fond.

pour désactiver mon menu sur quelle paramètre je doit impacter ? le void Initialisation() ?

#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;

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 DOWN = A2;
int LEFT = A3;
int RIGHT = 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(DOWN, INPUT_PULLUP);
  pinMode(LEFT, INPUT_PULLUP);
  pinMode(RIGHT, INPUT_PULLUP);
}



void loop() {
  Sondes();
  Regul();
  humi();
  heurefunc();
  bouton();
}


void bouton() {
  if ( millis() > Tempo ) {
    if (digitalRead(LEFT) == LOW) { /* Bouton LEFT  */
      SousMenu++;
      Tempo = millis() + 250;
      AfficheMenu();
    } else if (digitalRead(DOWN) == LOW) { /* Bouton Down  */
      Menu = Menu - 10;
      Tempo = millis() + 250;
      SousMenu = 0 ;
      AfficheMenu();
    } else if (digitalRead(UP) == LOW) { /* Bouton Up */
      Menu = Menu + 10;
      Tempo = millis() + 250;
      SousMenu = 0;
      AfficheMenu();
    } else if (digitalRead(RIGHT) == LOW) { /* Bouton RIGHT  */
      SousMenu--;
      Tempo = millis() + 250;
      AfficheMenu();
    } else if (digitalRead(SELECT) == LOW) { /* Bouton Select */
      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() {
  mypr(tc_100(addr1), 0);

  mypr(tc_100(addr2),1);
}