librairie MenuBackend et switch

Les cartes Arduino, les platines

librairie MenuBackend et switch

Message non lude lcd1602 » Ven 11 Mai 2012 07:42

bonjour.
je voudrai savoir si il est possible d'utiliser la librairie Menubackend et la fonction swicht:
voici le bout de programme que je voudrai améliorer:

void menuUseEvent(MenuUseEvent used)
{

lcd.setCursor(0,0);
lcd.print(" Menu valide ");
lcd.setCursor(5,1);

if(used.item.getName()== "Config"){
lcd.print(" Config ");
if (used.item.getName()=="Tps decl")
lcd.print(" tps decl");
}else if(used.item.getName()== "Capteurs"){
lcd.print(" Capteurs");
}else if(used.item.getName()=="start"){
lcd.print(" start");
}


donc je voudrai remplacer les if par un "swicht case", mais "used" me renvoi des caractères et non pas un "integer".
exist'il un moyen ou une fonction dans la librairie de le faire.
merci pour votre lecture. :D
lcd1602
 
Messages: 20
Inscription: Sam 5 Mai 2012 12:16

Re: librairie MenuBackend et switch

Message non lude Cassiope34 » Ven 11 Mai 2012 08:19

peut-être avec l'aide d'une des fonctions de la classe STRING ?
Cassiope34
 
Messages: 102
Inscription: Lun 16 Avr 2012 14:35

Re: librairie MenuBackend et switch

Message non lude lcd1602 » Ven 11 Mai 2012 09:58

bonjour,
merci pour votre réponse.
Ce que je cherche est: comment faire le lien entre l'organisation, la construction des menus et la fonction swicht case.
il y a peut être un index ou autre, mais je ne le trouve pas.
merci de votre lecture.
lcd1602
 
Messages: 20
Inscription: Sam 5 Mai 2012 12:16

Re: librairie MenuBackend et switch

Message non lude Cassiope34 » Ven 11 Mai 2012 12:14

et que retourne 'used.item' seul ?

exemple d'utilisation de switch ... case ... trouvé dans l'exemple donnée avec la librairie MenuBackend_1-4 :
Code: Tout sélectionner
#include <MenuBackend.h>

/*
   This is the structure of the modelled menu
   
   Settings
      Pin
      Debug
   Options
      Delay (D)
         100 ms
         200 ms
         300 ms
         400 ms
*/

//this controls the menu backend and the event generation
MenuBackend menu = MenuBackend(menuUseEvent,menuChangeEvent);
   //beneath is list of menu items needed to build the menu
   MenuItem settings = MenuItem("Settings");
      MenuItem pin = MenuItem("Pin");
      MenuItem debug = MenuItem("Debug");
   MenuItem options = MenuItem("Options");
      MenuItem setDelay = MenuItem("Delay",'D');
         MenuItem d100 = MenuItem("100 ms");
         MenuItem d200 = MenuItem("200 ms");
         MenuItem d300 = MenuItem("300 ms");
         MenuItem d400 = MenuItem("400 ms");
   
//this function builds the menu and connects the correct items together
void menuSetup()
{
   Serial.println("Setting up menu...");
   //add the file menu to the menu root
   menu.getRoot().add(settings);
      //setup the settings menu item
      settings.addRight(pin);
         //we want looping both up and down
         pin.addBefore(debug);
         pin.addAfter(debug);
         debug.addAfter(pin);
         //we want a left movement to pint to settings from anywhere
         debug.addLeft(settings);
         pin.addLeft(settings);
   settings.addBefore(options);
   settings.addAfter(options);
      options.addRight(setDelay);
         setDelay.addLeft(options);
         setDelay.addRight(d100);
            d100.addBefore(d100); //loop to d400
            d100.addAfter(d200);
            d200.addAfter(d300);
            d300.addAfter(d400);
            d400.addAfter(d100); //loop back to d100
            //we want left to always be bak to delay
            d100.addLeft(setDelay);
            d200.addLeft(setDelay);
            d300.addLeft(setDelay);
            d400.addLeft(setDelay);
   options.addAfter(options);
}

/*
   This is an important function
   Here all use events are handled
   
   This is where you define a behaviour for a menu item
*/
void menuUseEvent(MenuUseEvent used)
{
   Serial.print("Menu use ");
   Serial.println(used.item.getName());
   if (used.item == setDelay) //comparison agains a known item
   {
      Serial.println("menuUseEvent found Dealy (D)");
   }
}

/*
   This is an important function
   Here we get a notification whenever the user changes the menu
   That is, when the menu is navigated
*/
void menuChangeEvent(MenuChangeEvent changed)
{
   Serial.print("Menu change ");
   Serial.print(changed.from.getName());
   Serial.print(" ");
   Serial.println(changed.to.getName());
}

void setup()
{
   Serial.begin(9600);
   
   menuSetup();
   Serial.println("Starting navigation:\r\nUp: w   Down: s   Left: a   Right: d   Use: e");
}

void loop()
{
   if (Serial.available()) {
      byte read = Serial.read();
      switch (read) {
         case 'w': menu.moveUp(); break;
         case 's': menu.moveDown(); break;
         case 'd': menu.moveRight(); break;
         case 'a': menu.moveLeft(); break;
         case 'e': menu.use(); break;
      }
   }
}
Cassiope34
 
Messages: 102
Inscription: Lun 16 Avr 2012 14:35

Re: librairie MenuBackend et switch

Message non lude lcd1602 » Ven 11 Mai 2012 12:39

oui, je l'ai déjà compulsé mais le swicht case marche avec une touche( byte), et pas avec un string.
byte read = Serial.read();
switch (read) {
case 'w': menu.moveUp(); break;
case 's': menu.moveDown(); break;
case 'd': menu.moveRight(); break;
case 'a': menu.moveLeft(); break;
case 'e': menu.use(); break;
}
}
}
lcd1602
 
Messages: 20
Inscription: Sam 5 Mai 2012 12:16

Re: librairie MenuBackend et switch

Message non lude Cassiope34 » Ven 11 Mai 2012 14:34

et tu sais ce que retourne 'used.item' seul ?
Cassiope34
 
Messages: 102
Inscription: Lun 16 Avr 2012 14:35

Re: librairie MenuBackend et switch

Message non lude lcd1602 » Ven 11 Mai 2012 16:33

non, impossible d’afficher le contenu avec la fonction print :twisted:
lcd1602
 
Messages: 20
Inscription: Sam 5 Mai 2012 12:16

Re: librairie MenuBackend et switch

Message non lude Cassiope34 » Ven 11 Mai 2012 16:39

C'est cette partie là qui m'avait fait te poser la question :) :oops:

Code: Tout sélectionner
void menuUseEvent(MenuUseEvent used)
{
   Serial.print("Menu use ");
   Serial.println(used.item.getName());
   if (used.item == setDelay) //comparison agains a known item
   {
      Serial.println("menuUseEvent found Dealy (D)");
   }
}
Cassiope34
 
Messages: 102
Inscription: Lun 16 Avr 2012 14:35

Re: librairie MenuBackend et switch

Message non lude lcd1602 » Sam 12 Mai 2012 18:16

bonjour,
je l'ai fait avec des if et else if :?
voilà
merci pour votre aide. ;)
lcd1602
 
Messages: 20
Inscription: Sam 5 Mai 2012 12:16


Retourner vers Arduino

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron