Problème de menu imbriqué


bonjour,

j'en suis à l'étape de test d'un photo trigger autonome, avec des réglages affichés sur un écran lcd et contrôlable par un encodeur rotatif cliquable, seul problème la gestion de ce menu est assez laborieuses. disons que je n'arrive pas passer d'une fonction une autre sans avoir un affichage clair :

code: [select]
//librairies
#include <liquidcrystal.h>

#define pha 9
#define phb 8
#define bouton 10

//déclaration
//entrées sorties
liquidcrystal lcd(12, 11, 5, 4, 3, 2);
int actionneur = 13;
int apn = 7;
int flash = 6;
int capteuranalogique = a1 ;

//sensor analogique
int etatanalogique;
int etat_a = low;

//valeurs
unsigned long pushtime; //le pushtime en ms
long pushdelay = 500; //la variable de référence du push en ms
int reglage;
int mode;
int set;
int dispositif;
int variable;
int potval;
int etat_a_avant = low;

//initialisation des réglages à 0
int valeurdelaisapn;
int valeursensibilite;
int valeurdelaisflash;
int valeurdelaisboucle;
int valeurdelaisaction;
int defaut = 0;


void setup() {
 
  pinmode(bouton, input); //met la broche en entree
  digitalwrite(bouton, high); // activation du pullup de la broche en entrée
  pinmode(actionneur, output); //sortie
  digitalwrite(actionneur, low);
  pinmode(pha, input);
  pinmode(phb, input);
  lcd.begin(16, 2);
 
}

void loop(){
        etat_a = digitalread(pha);
      if((etat_a_avant== low) && (etat_a==high)){
      if (digitalread (phb) == high){
          potval++;
        }
        else {
          potval--;
  }
        }
     etat_a_avant = etat_a;
     
    if ((digitalread(bouton)==low) && (millis() - pushtime >> pushdelay) ){   //on temporise avec millis pour accuenter la protection contre les rebonds.
     variable++; // valide
     pushtime = millis();
     while(digitalread(bouton)==low); // evite le rebond
}
menu();
}

void menu(){
  reglage = variable;

switch (reglage) {
 
case 0: //cas de repos quand la variable parametre est 0, ici on protège les réglage en ne faisant rien si on tourne le codeur
    accueil();
break;
case 1: //quand la variable parametre est sur 1 (ici le délais)
    modemenu();
break;
case 2:
    delaisapn();
break;
    delaisflash();
case 3:
    delaisaction();
break;
case 4:
    sensibilite();
break;
case 5:
    delaisboucle();
break;
case 6:
    ready();
break;
case 7:
    reglage = 1;
break;
}
}



  void accueil(){
    lcd.setcursor(0,0);
    lcd.print("          ");
    lcd.setcursor(0,0);
    lcd.print("photo trigger");
    lcd.setcursor(0,1);
    lcd.print("         ");   
    lcd.setcursor(0,1);
    lcd.print("based on arduino");
   
  }
  void modemenu(){
      potval = 0;
      mode = potval;
     
switch (mode) {
 
case 0: //cas de repos quand la variable parametre est 0
     lcd.setcursor(0,0);
     lcd.print("          ");
     lcd.setcursor(0,0);
     lcd.print("selection mode");
     lcd.setcursor(0,1);
     lcd.print("         ");   
     lcd.setcursor(0,1);
     lcd.print("select");
break;
case 1:
     lcd.setcursor(0,0);
     lcd.print("          ");
     lcd.setcursor(0,0);
     lcd.print("selection mode");
     lcd.setcursor(0,1);
     lcd.print("         ");   
     lcd.setcursor(0,1);
     lcd.print("par push");
break;
case 2:
     lcd.setcursor(0,0);
     lcd.print("          ");
     lcd.setcursor(0,0);
     lcd.print("selection mode");
     lcd.setcursor(0,1);
     lcd.print("         ");   
     lcd.setcursor(0,1);
     lcd.print("capteur off->on");
break;
case 3: //cas de repos quand la variable parametre est 0, ici on protège les réglage en ne faisant rien si on tourne le codeur
     lcd.setcursor(0,0);
     lcd.print("          ");
     lcd.setcursor(0,0);
     lcd.print("selection mode");
     lcd.setcursor(0,1);
     lcd.print("         ");   
     lcd.setcursor(0,1);
     lcd.print("capteur on->off");
break;
case 4:
     lcd.setcursor(0,0);
     lcd.print("          ");
     lcd.setcursor(0,0);
     lcd.print("selection mode");
     lcd.setcursor(0,1);
     lcd.print("         ");   
     lcd.setcursor(0,1);
     lcd.print("par push boucle");
break;
}
}
  void delaisapn(){
       potval = 0;
       valeurdelaisapn = potval;
     lcd.setcursor(0,0);
     lcd.print("          ");
     lcd.setcursor(0,0);
     lcd.print("delais apn");
     lcd.setcursor(0,1);
     lcd.print("         ");   
     lcd.setcursor(0,1);
     lcd.print(valeurdelaisapn);
}



je coince un peu sur la structure imbriquée de ce menu, et cette heure je ne vois pas de solutions.

faut être un peu plus explicite sur ton problème parce que "affichage pas clair" ça peut être tout et n'importe quoi ...


Arduino Forum > International > Français (Moderators: jfs, Snootlab) > Problème de menu imbriqué


arduino

Comments

Popular posts from this blog

Convierte tu Raspberry en un NAS. Firmware fvdw-sl 15.3 - Raspberry Pi Forums

How to format a Get Request

avrdude: verification error, first mismatch at byte 0x0000 0x0c != 0x62