Affichage valeurs capteurs en continu sur LCD

Bonsoir,

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;
    }
  }
}

bonsoir,
une fois que tu es entré dans ta 1ère boucle while, tu entres dans une nouvelle avec la même condition : tu n'en sors jamais

j'en déduis que tu as résolu ton problème de valeurs analogiques dans la lecture du clavier ?

Oui j'ai compris le problème, mais je ne vois pas quelle condition mettre pour arriver à faire ce que je veux.

Et non pas résolu, mais j'avance sur autre chose du coup.

il faut que ta variable activeButton évolue dans la 1ère boucle while pour en sortir.

dans ton case 4 : elle est bien modifiée, mais pas dans le case 1 :.

Oui le problème est ma condition.

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).