Aller au contenu

Filament ABS

JeanJul

Déshydrateur

Messages recommandés

Bonjour,

Je suis en train de réaliser un déshydrateur sur base d'arduino avec mon panel et autre pièce imprimé en 3D.

J'ai une problématique je souhaite faire un menu pour naviguer et lancer différents programmes. J'arrive à naviguer dans des menus grace à d'excellent tuto trouvés sur le net (Notamment: https://skyduino.wordpress.com/2014/07/06/arduino-lcd-faire-un-menu-sous-forme-de-liste/) mais par contre je n'arrive pas à gérer la modification de valeur et le début du programme.

J'aimerais faire quelque chose qui ressemble à ça:

Choix Programme:
-Simple
     -Durée: 10h30
          -Temp: 40°c
                -Lancement du prog...
-Express
     -Durée 1: 1h00
          -Temp1: 55°c
               -Durée2: 8h00
                    -Temp2: 41°c
                         -Lancement du prog...

J'ai 4 boutons: que je gère en analogique sur 1 pin.

  • Haut pour +
  • Bas pour -
  • Gauche pour Retour
  • Droite pour Valider

Et lorsque le prog est lancé j'aimerais pouvoir modifier ses paramètres.

Avez vous une idée? ou un exemple qui traine?

 

Merci à vous.

Modifié (le) par JeanJul

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut !
Pour modifier une variable, il faut que celle-ci soit déclarée en globale et que la fonction de callback du menu correspondant te permette de la modifier.

Pour cela tu peux t'inspirer du fonctionnement de la fonction displayMenu en l'adaptant quelque peu pour afficher une variable et la modifier grâce au clavier.

Voici un exemple minimal montrant l'idée :

int myVar=0;
static const char* MAIN_MENU_ITEMS[] = {
  "Cycle simple",
  "Cycle express"
};
static const Menu_t MAIN_MENU = {
  "Votre choix ?",
  MAIN_MENU_ITEMS,
  2,
  &doMainMenuAction
};
void setup(void){}

void loop(void){

 displayMenu(MAIN_MENU);

}

void doMainMenuAction(byte selectedMenuItem) {
 
   if(selectedMenuItem == 0) {
 
      setMode(0);
 
  } else {
      setMode(1);
   
  }
}

void setMode(int Mode){
 int tempVar = myVar; //On stocke la valeur de myVar dans une variable temporaire
 bool myVar_is_set =false;
 Button_t buttonPressed; 

 while(!myVar_is_set){
  lcd.clear();
  lcd.print(F("MyVar :"));
  lcd.setCursor(0, 1);
  lcd.print(tempVar);

  while((buttonPressed = readPushButton()) == BP_NONE);
  delay(30);
  while(readPushButton() != BP_NONE);
  
  switch(buttonPressed) {
   case BP_UP:
    tempVar++; //On incrémente de 1 la valeur affichée
   break;
   case BP_DOWN:
    if(tempVar>0){
     tempVar--;
    }
   break;
   case BP_RIGHT:
    myVar=tempVar;   //On enregistre la valeur souhaitée
    myVar_is_set=true;
   break;
   case BP_LEFT:
    return;
   break;
   }
  } //myVar est fixée, on continue
  runCycle(Mode);
 }

void runCycle(int Mode){

La fonction qui va gérer les cycles

}

tu as un menu principal te permettant de gérer les différents cycles. Quand tu en sélectionnes un, tu te retrouves devant un écran te proposant de donner une valeur à "myVar", géré par la fonction setMode. Une fois que c'est fait, la fonction runCycle est appelée pour gérer ton cycle.

Ce n'est qu'un exemple, mais tu devrais pouvoir l'adapter à ton cas et à tes variables :)

J'avais utilisé la méthode de skywodd dont tu parles pour créer les menus d'un capteur de pression. Au besoin je pourrai te retrouver le code si tu as besoin d'un exemple plus "réel"

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant


×