Re bonjour,
J'ai profité des posts qui viennent d'être publiés sur ce forum pour modifier la fonction EXECUTER().
Auparavant selon les positions horizontales (Select_Menu0 variant de 0 à 2 et Hauteur variant de 0 à1 je faisait une sélection avec un switch(Select_Menu0) pour appeler la fonction adéquate.
Ce travail était fait dans la fonction EXECUTER().
Maintenant je déclare deux tableaux de pointeurs sur des fonctions, :
// libellés des menus :
char Phrase[16][16] ={"Men1*Men2*Men3*","Menua-Menb-Menc"};
// Déclarations des fonctions et pointeurs :
void ME1();void ME2();void ME3();
void MEA();void MEB();void MEC();
void (*pFonctionTab0[3])()={ME1,ME2,ME3};// tableau pour la ligne 0 de menu
void (*pFonctionTab1[3])()={MEA,MEB,MEC};//tableau pour la ligne 1 de menu
Et la fonction EXECUTER() est remplacée par la fonction P_EXECUTER()
// Appel de la fonction repérée par son pointeur
void P_EXECUTER()
{if (Hauteur==0)
pFonctionTab0[Select_Menu0]();
else pFonctionTab1[Select_Menu0]();
BUZZER(50);delay(500);
}
Il me reste à éventuellement encore compacter cela en ne déclarant qu'un tableau de pointeurs de fonctions mais a deux dimensions, de ce fait je pense réduire P_EXECUTER() à une seule ligne
Ce code fonctionne pour un menu contenant deux lignes de 4 sous-menus; je viens de l'adapter pour publier sur le forum en deux lignes de 3 sous-menus de façon à ce qu'il soit cohérent avec les posts précédents.
Je considère cela juste comme un exercice me permettant de m'habituer à l'usage des pointeurs.
N'hésitez pas à signaler les éventuels erreurs, problèmes....
Serge .D