Partage
  • Partager sur Facebook
  • Partager sur Twitter

Programmer un menu avec boutons

7 octobre 2019 à 8:05:18

Bonjour

Je souhaiterai programmer un menu avec bouton avec des actions différentes selon l'ordre dans lequel on appuie sur les boutons. Ainsi :
- bouton CAL--> action CAL (symbolisé par affichage de "Appui CAL seul")
- bouton ENTER --> action ENTER (symbolisé par affichage de "ENTER appuye")
- Bouton ENTER --> action ENTER --> si appui bouton CAL --> action CAL après ENTER (symbolisé par affichage du message "Appui CAL ap enter")

Mon schéma électrique est bon car quand j'appuie sur chacun des boutons, j'ai bien un message qui s'affiche (CAL, ENTER) par contre, je dois avoir un souci de programmation car quand je sélectionne ENTER puis CAL, l'affichage reste celui de CAL alors qu'il devrait être CAL après ENTER.
(A terme, je rajouterai un 3ème bouton mais je pense qu'une fois le principe trouvé, je pourrais m'en sortir)

#include "DFRobot_PH.h"
#include <EEPROM.h>
#include <Wire.h>
#include<LiquidCrystal_I2C.h>

#define PH_PIN A1
#define pinBoutonEnter  2
#define pinBoutonCal  4
#define pinBoutonExit  7


LiquidCrystal_I2C lcd(0x27, 20, 4);


boolean lastBoutonEnter = LOW;  //a
boolean lastBoutonCal = LOW;
boolean lastBoutonExit = LOW;
boolean etatBoutonEnter;
boolean etatBoutonCal;
boolean etatBoutonExit;


void setup()
{
  Serial.begin(BAUD);
  ph.begin();
 
  lcd.init(); // initialisation de l'afficheur
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Appuyer ETALON   ");
  lcd.setCursor(0, 1);
  lcd.print("pour etalonnage  ");
  lcd.setCursor(0, 2);
  lcd.print("ou attendre 10s  ");
  lcd.setCursor(0, 3);
  lcd.print("pour mesurer pH  ");
}

void loop()
{
    lcd.backlight();
 
    boolean testBoutonEnter = 0; //variable pour savoir si on rentre dans la boucle de calibration
    boolean testBoutonCal = 0; //variable pour savoir si on valide l'étalonnage
    boolean testBoutonExit = 0; //variable pour quitter le mode étalonnage

    static unsigned long timepoint = millis();   
   
    //on teste si le bouton ENTER est pressé --> si oui, on rentre dans le mode de calibration
    etatBoutonEnter=digitalRead(pinBoutonEnter);
    if (etatBoutonEnter != lastBoutonEnter)
    {
      delay(20);
      etatBoutonEnter=digitalRead(pinBoutonEnter);
      if (etatBoutonEnter == HIGH)
      {
        testBoutonEnter=1;
        lcd.backlight();
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("ENTER appuye");
        lcd.setCursor(0,3);
        lcd.print(testBoutonEnter);

        while (testBoutonEnter==1)
        {
               
        //on teste si le bouton CAL est pressé --> si oui, on valide l'étalonnage
        etatBoutonCal=digitalRead(pinBoutonCal);
        if (etatBoutonCal != lastBoutonCal)
        {
          delay(20);
          etatBoutonCal=digitalRead(pinBoutonCal);
          if (etatBoutonCal == HIGH)
          {
            testBoutonCal = 1;
            lcd.backlight();
            lcd.clear();
            lcd.setCursor(0,0);
            lcd.print("Appui CAL ap enter");
            lcd.setCursor(0,3);
            lcd.print(testBoutonEnter);
            testBoutonEnter=0;
          }
        }
       
        }
       
      }
    }

    //on teste si le bouton CAL est pressé --> si oui, on valide l'étalonnage
        etatBoutonCal=digitalRead(pinBoutonCal);
        if (etatBoutonCal != lastBoutonCal)
        {
          delay(20);
          etatBoutonCal=digitalRead(pinBoutonCal);
          if (etatBoutonCal == HIGH)
          {
            testBoutonCal = 1;
            lcd.backlight();
            lcd.clear();
            lcd.setCursor(0,0);
            lcd.print("Appui CAL seul");
            lcd.setCursor(0,3);
            lcd.print(testBoutonEnter);           
          }
        }
   
    lastBoutonEnter=etatBoutonEnter;
    lastBoutonCal=etatBoutonCal;
}

Pourriez-vous m'aiguiller à trouver l'origine de mon erreur ?

Merci

  • Partager sur Facebook
  • Partager sur Twitter