Go Down

Topic: besoin d'aide pour un menu, (Read 2461 times) previous topic - next topic

Dams501

Apr 23, 2019, 11:25 pm Last Edit: Apr 23, 2019, 11:30 pm by Dams501
bonjour

je suis nouveau et débutant dans l Arduino j'ai crée un menu en suivant un tuto dans le quelle je peux naviguer dans des sous menu. et la je bloque je souhaiterai afficher une variable dans mon menu je vous colle mon code la ou je voudrait que ma variable apparaisse.
je voudrait qu il soit afficher sur mon lcd par exemple

2.1  Tmin....................25

et la je bloc impossible d ajouter ma variable 25


Code: [Select]

NumMenu[21] = (TypeMenu) {
  "2.1 T min"
};



je vous mais mon code complet egalement

Code: [Select]






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

int ventilo = 6;
int sonde = 7;
int relais = 8;
int Tmin = 25;
int Tmax= Tmin + 10;

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) {
   "2.1 T min"
 };
 NumMenu[22] = (TypeMenu) {
   "2.2 T max"
 };
 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("IHM 3D");
 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();
 heure();
 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 :
         Serial.print("Temp Min");

     case 22 :
         Serial.print("Temp Max");

     case 31 :
         Serial.print("Humid Min");

     case 32 :
         Serial.print("Temp Min");

     case 41 :
         Serial.print("reglage");
        
     case 42 :
         Serial.print("Heure");
        
     }
   }
 }
}

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 > 0) {
   if ((digitalRead(test1)) == HIGH) {
     Serial.print("action on test1");
   }
   if ((digitalRead(test1)) == LOW) {
     Serial.print("action off test1");
   }
 }
}

void humi() {
   if (test2 > 0) {
   if ((digitalRead(test2)) == HIGH) {
     Serial.print("action on test2");
   }
   if ((digitalRead(test2)) == LOW) {
     Serial.print("action off test2");
   }
 }
}

void heure() {
   if (test3 > 0) {
   if ((digitalRead(test3)) == HIGH) {
     Serial.print("action on test3");
   }
   if ((digitalRead(test3)) == LOW) {
     Serial.print("action off test3");
   }
 }
}
C'est a force d'enfiler les poules que l'on finit par casser des œufs !

lesept

Tu peux essayer d'afficher un truc comme ça
Code: [Select]
NumMenu[21]+"........." +String(variable)
Où 'variable' contient ta valeur 25
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Dams501

Code: [Select]
  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 ?

Code: [Select]
      case 21 :
          Serial.print("Temp Min");
          if(Tmin <= 30){
            Tmin = Tmin + 1;
          }
          else {
            Tmin = 5;
          }
          Serial.print(Tmin);
          break;
C'est a force d'enfiler les poules que l'on finit par casser des œufs !

lesept

Il faut ajouter après ton Serial.print la ligne de mise à jour de ton menu: NumMenu[21] =...
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Dams501

#4
Apr 24, 2019, 09:02 am Last Edit: Apr 24, 2019, 09:02 am by Dams501
encore merci pour ton aide. j'ai teste se que tu ma dit mais j ai pas du tout comprendre ^^ j'ai mis sa
Code: [Select]
     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;
C'est a force d'enfiler les poules que l'on finit par casser des œufs !

lesept

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' :
Code: [Select]
    switch (Menu + SousMenu) {
     case 21 :
        {    <-- ici
         if(Tmin <= 29){
 ... blablabla ...
         break;
        }    <-- et là
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Dams501

ma compilation se passe bien mais mon menu ne se met pas a jour  :smiley-confuse: jte met mon code complet j'ai surement couiller ailleurs
Code: [Select]
#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");
    }
  }
}
C'est a force d'enfiler les poules que l'on finit par casser des œufs !

lesept

Normal, le break te fait sortir de la poule euh non, du case :
Code: [Select]
         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')
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Dams501

#8
Apr 24, 2019, 10:12 am Last Edit: Apr 24, 2019, 10:18 am by Dams501
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  :D  :D  ;)




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é

Code: [Select]
#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 a force d'enfiler les poules que l'on finit par casser des œufs !

lesept

#9
Apr 24, 2019, 10:33 am Last Edit: Apr 24, 2019, 10:35 am by lesept
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)
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Dams501

#10
Apr 24, 2019, 10:58 am Last Edit: Apr 24, 2019, 11:07 am by Dams501
edit; ah tu veux dire que je peut retirer de chaque bouton AfficheMenu(); je comprend nikel



sa marche   ;)  ;)  ;)  :D  :D  :D


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

Code: [Select]
#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");
    }
  }
}
C'est a force d'enfiler les poules que l'on finit par casser des œufs !

lesept

Au lieu de ça
Code: [Select]
     case 42 :
         ;
     }
   }
 }
 AfficheMenu();  // <-- pas ici
}


je pensais à ça
Code: [Select]
     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

A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Dams501

#12
Apr 24, 2019, 11:24 am Last Edit: Apr 24, 2019, 11:25 am by Dams501
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
C'est a force d'enfiler les poules que l'on finit par casser des œufs !

lesept

No problem, moi ou un autre...
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Dams501

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

Code: [Select]
#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

Code: [Select]
#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
C'est a force d'enfiler les poules que l'on finit par casser des œufs !

Go Up