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 a passer d'une fonction a une autre sans avoir un affichage clair :

//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 a 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 a 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 a 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 a 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 ...

Le problème n'existe plus, je l'ai résolu, le problème venait simplement du fait que lors du lcdprint (" "), servant a effacer le texte précédent, le nombre d'espace était insuffisant pour effacer les 16 caractères contenus dans le précédent affichage.

pour effacer du texte, on affiche pas des espaces mais utilise la méthode clear()