Je n'arrive pas à formuler les conditions pour obtenir le résultat suivant, lorsque j'arrive dans un sous-menu de mon programme :
Lorsque j'appuie sur un bouton, le programme affiche en continue les données d'un capteur (gyroscope)
Lorsque je ré-appuie sur le bouton, l'affichage s'arrête sur la dernière valeur relevée
Lorsque j'appuie sur un autre bouton, je reviens au début de ce sous-menu pour un nouveau relevé
Lorsque j'appuie sur le bouton gauche je reviens au menu principal
Pour l'instant il m'affiche la vitesse angulaire en continue quand j'appuie à droite mais je ne vois pas comment sortir de cette boucle (quelle condition?).
void gyro() {
int activeButton = 0;
//affichage de base
lcd.clear();
lcd.setCursor(0,0);
lcd.write(byte(0));
lcd.setCursor(1,0);
lcd.print("Gyro");
while (activeButton == 0) {
int button;
readKey = analogRead(0);
button = evaluateButton(readKey);
switch (button) {
case 1: // bouton de droite, affichage données gyroscope en continue
Calibration_capteurs();
while (activeButton == 0) {
IMU.readSensor();
GyroY = IMU.getGyroY_rads();
Gyro_Sortie();
lcd.setCursor(0,1);
lcd.print(GyroY);
}
break;
case 4: // bouton de gauche, censé me faire retourner au menu principal mais programme coincé dans le while
button = 0;
activeButton = 1;
break;
}
}
}
J'ai écris l'algorithme et ça m'a un peu débloqué :
Sous-menu Gyro
Si
je clique sur le bouton droit
Alors
calibration du capteur
affichage des valeurs au fur et à mesure tant que le bouton droit n'est pas appuyé de nouveau
Si
je clique sur le bouton select
Alors
retour au début (sous-menu 2)
Si
je clique sur le bouton gauche
retour au menu principal
case 1:
Calibration_capteurs();
readKey=25;
while (readKey>20) {
IMU.readSensor();
GyroY = IMU.getGyroY_rads();
Gyro_Sortie();
lcd.setCursor(0,1);
lcd.print(GyroY);
readKey = analogRead(0);
}
break;
Bon maintenant j'ai un nouveau problème : le capteur s'arrête bien de défiler quand je ré-appuie mais il retourne directement au case 1 et relance le truc tout seul... Je vais peut-être simplement affecter un autre bouton.
J'arrête là pour ce soir, et au passage je vous remercie, ainsi que les différents intervenants du forum qui prennent sur leur temps pour aider les débutants comme moi!
c'est là que mettre en œuvre une machine à états finis commence à s'imposer pour résoudre tes problèmes de gestion de boutons : dans le sous-forum "Tuto..." tu trouveras un sujet de J-M-L, plutôt velu pour un novice, mais très instructif (je te laisse chercher, trop la flemme d'aller copier-coller le lien ...).
résous déjà ton souci de valeurs ana pour les boutons, et penche-toi sur la question des FSM (c'est du british : Finite-State Machine).