Changement d'une variable dans un menu

Bonjour,
je bloque sur le changement de variable dans un menu d’un LCD 16*2 avec bouton poussoir intégrer. http://www.dfrobot.com/wiki/index.php?title=Arduino_LCD_KeyPad_Shield_(SKU:_DFR0009)

J’ai beau regarder sur les forums je ne vois rien qui puisse me guider.
Voici mon ébauche de code, si une âme charitable pouvait me donner une piste cela serait sympa.

Merci

#include <LiquidCrystal.h>
 
// Initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
 int air = 20; //consigne d'air
 int tc = 30; // consigne de temperature
//States for the menu.
int currentMenuItem = 0;
int lastState = 0;
 
void setup() {
   //Set the characters and column numbers.
   lcd.begin(16, 2);
   //Print default title.
   clearPrintTitle();
}
 
void loop() {
  //Call the main menu.
  mainMenu();
}
 
void mainMenu() {
  //State = 0 every loop cycle.
  int state = 0;
  //Refresh the button pressed.
  int x = analogRead (0);
  //Set the Row 0, Col 0 position.
  lcd.setCursor(0,0);
 
  //Check analog values from LCD Keypad Shield
  if (x < 50) {
    //Right
    state = 4;
  } else if (x < 250) {
   //Up
    state = 1;
  } else if (x < 450){
   //Down
    state = 2;
  } else if (x < 650){
    //Left
    state = 5;
  } else if (x < 850){
    //Select
    state = 3;
  }
 
  //If we are out of bounds on th menu then reset it.
  if (currentMenuItem < 0 || currentMenuItem > 2) {
   currentMenuItem = 0; 
  }
 
   //If we have changed Index, saves re-draws.
   if (state != lastState) {
      if (state == 1) {
         //If Up
          currentMenuItem = currentMenuItem - 1; 
          displayMenu(currentMenuItem);
      } else if (state == 2) {
         //If Down
          currentMenuItem = currentMenuItem + 1;  
          displayMenu(currentMenuItem);
      } else if (state == 3) {
         //If Selected
         selectMenu(currentMenuItem); 
      }
      //Save the last State to compare.
      lastState = state;
   } 
   //Small delay
   
  delay(5);
}
 //Print a basic header on Row 1.
void clearPrintTitle() {
  lcd.clear();
  lcd.setCursor(4,0);
  lcd.print("Accueil");
  lcd.setCursor(0,1); 
}

//Display Menu Option based on Index.
void displayMenu(int x) {
     switch (x) {
      case 1:
      lcd.clear();
        //clearPrintTitle();
        lcd.print ("Air");
        break;
      case 2:
      lcd.clear();
        //clearPrintTitle();
        lcd.print ("Temperature");
        break;
       
    }
}
  
//Show the selection on Screen.
void selectMenu(int x) {
   switch (x) {
      case 1:// pour le changement d'air
     lcd.clear();
       lcd.print("Reglage Air");
       if state = 4
       air = air +1;
       if state = 5;
       air = air -1;
       lcd.setCursor(4,1);
       lcd.print(air);
        //Call the function that belongs to Option 1
        break;
      case 2: // pour le changement de temperature
        lcd.clear();
        lcd.print ("Reglage T c");
         if state = 4
       tc = tc +1;
       if state = 5;
       tc = tc -1;
       lcd.setCursor(4,1);
       lcd.print(tc);
       
        //Call the function that belongs to Option 2
        break;
       
    }
}

Bonjour, Ce topic ne ferait-il pas pas doublon avec : http://forum.arduino.cc/index.php?topic=234994.msg1690907#msg1690907 ?

Si mais comme j’avais mis dans le BAR, je me suis permis de le refaire dans le général.

Re,

guigui76: Si mais comme j'avais mis dans le BAR, je me suis permis de le refaire dans le général.

Dans ce cas, il y a plus simple : demande au modo de déplacer le sujet

OK, vraiment désolé.
Promis je ne le ferai plus

Bon je continue à chercher voilà une modification, cela ne bloque plus mais je n’ai pas de changement de valeur.

#include <LiquidCrystal.h>
 
// Initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
 int air = 20; //consigne d'air
 int tc = 30; // consigne de temperature
 int pulse =0; // etat des boutons droit et gauche
//States for the menu.
int currentMenuItem = 0;
int lastState = 0;
 
void setup() {
   //Set the characters and column numbers.
   lcd.begin(16, 2);
   //Print default title.
   clearPrintTitle();
}
 
void loop() {
  //Call the main menu.
  mainMenu();
}
 
void mainMenu() {
  //State = 0 every loop cycle.
  int state = 0;
  //Refresh the button pressed.
  int x = analogRead (0);
  //Set the Row 0, Col 0 position.
  lcd.setCursor(0,0);
 
  //Check analog values from LCD Keypad Shield
  if (x < 50) {
    //Right
    state = 4;
  } else if (x < 250) {
   //Up
    state = 1;
  } else if (x < 450){
   //Down
    state = 2;
  } else if (x < 650){
    //Left
    state = 5;
  } else if (x < 850){
    //Select
    state = 3;
  }
 
  //If we are out of bounds on th menu then reset it.
  if (currentMenuItem < 0 || currentMenuItem > 2) {
   currentMenuItem = 0; 
  }
 
   //If we have changed Index, saves re-draws.
   if (state != lastState) {
      if (state == 1) {
         //If Up
          currentMenuItem = currentMenuItem - 1; 
          displayMenu(currentMenuItem);
      } else if (state == 2) {
         //If Down
          currentMenuItem = currentMenuItem + 1;  
          displayMenu(currentMenuItem);
      } else if (state == 3) {
         //If Selected
         selectMenu(currentMenuItem); 
      }
       else if (state ==4) {
         //If Selected
        pulse ==1; // si bouton droite activé alors met pusle a 1
      } 
      else if (state ==5) {
         //If Selected
        pulse ==-1;//si bouton droite activé alors met pusle a -1
      }
      //Save the last State to compare.
      lastState = state;
   } 
   //Small delay
   
  delay(5);
}
 //Print a basic header on Row 1.
void clearPrintTitle() {
  lcd.clear();
  lcd.setCursor(4,0);
  lcd.print("Accueil");
  lcd.setCursor(0,1); 
}

//Display Menu Option based on Index.
void displayMenu(int x) {
     switch (x) {
      case 1:
      lcd.clear();
        //clearPrintTitle();
        lcd.print ("Air");
        break;
      case 2:
      lcd.clear();
        //clearPrintTitle();
        lcd.print ("Temperature");
        break;
       
    }
}
  
//Show the selection on Screen.
void selectMenu(int x) {
   switch (x) {
      case 1:// pour le changement d'air
     lcd.clear();
       lcd.print("Reglage Air");
      if (pulse=1)
       air = air +1;
      if (pulse=-1)
       air = air -1;
       lcd.setCursor(4,1);
       lcd.print(air);
        //Call the function that belongs to Option 1
        break;
      case 2: // pour le changement de temperature
        lcd.clear();
        lcd.print ("Reglage T c");
         if (pulse=1)
      tc = tc +1;
      if (pulse=-1)
      tc = tc -1;
       
       lcd.setCursor(4,1);
       lcd.print(tc);
       
        //Call the function that belongs to Option 2
        break;
       
    }
}

Personne n'a une petite idée? :~

Dans ce sujet il y a un bout de code qui devrait t'aider :

http://forum.arduino.cc/index.php?topic=100190.0

Merci, je regarde de suite

Merci pour le lien, sympa la pompe à vide ( vous l'utilisez pourquoi?). J'ai regardé le code, vous utilisez un bouton pour diminuer ou augmenter la valeur de la pression, ce que je fais déjà dan smon projet principal. je recherche plus la façon de faire la modification d'une variable dans un sous-menu.

Mais je vous remercie énormément. Guigui76