menu sur lcd 16*2

Bonjour, mon projet est le suivant ayant un écran lcd 16*2 je souhaite faire un menu sur celui.

j’ai donc débuter le code suivant.

#include <LiquidCrystal.h>
 
int touche_lcd     = 0;
int adc_key_in  = 0;
#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5
 

int lecture_bouton_lcd()
{
 adc_key_in = analogRead(0); 

 if (adc_key_in > 1000) return btnNONE;

 if (adc_key_in < 50)   return btnRIGHT;  
 if (adc_key_in < 195)  return btnUP; 
 if (adc_key_in < 380)  return btnDOWN; 
 if (adc_key_in < 555)  return btnLEFT; 
 if (adc_key_in < 790)  return btnSELECT;   
 return btnNONE;
}
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
 
void setup() 
{
  lcd.begin(16,2);
  lcd.setCursor(3,0);
  lcd.print("Bienvenue");
  delay(1500);
  lcd.clear();
  lcd.print("<");
  lcd.setCursor(3,0);
  lcd.print("Choix menu");
  lcd.setCursor(15,0);
  lcd.print(">");
  

}
 
void loop()

{
 
 touche_lcd = lecture_bouton_lcd();
 switch (touche_lcd)
  {
 case btnRIGHT:
    {
      int choix = 0;
      choix++;
        if (choix==1)
        {
          lcd.clear();
          lcd.print("Temperature");
          choix++;
        }
        
        else if (choix==2)
        {
          lcd.clear();
          lcd.print("Luminosite");
        }
        break;
      }
      
     
    }
  }

Or quand je teste ce dernier le premier appui est gérer et m’affiche donc température mais pas les suivant qui devrait afficher luminosité.

je m’en remet donc a vous merci d’avance.

bonjour, normal regarde mieux ton code ;)

case btnRIGHT:
    {
      int choix = 0;

d'après toi, ca fait quoi a chaque fois que tu a btnRIGHT? ca remet à zéro et rajoute 1, donc ca sera toujours 1 et non 2

vire ton int choix = 0; mets le dans tes déclarations. après tu mets un truc de ce genre

choix++;
if (choix>2) choix=0;

ca tournera en boucle

merci c’est deja mieux comme ca
#include <LiquidCrystal.h>

int choix = 0;
int touche_lcd = 0;
int adc_key_in = 0;
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5

int lecture_bouton_lcd()
{
adc_key_in = analogRead(0);

if (adc_key_in > 1000) return btnNONE;

if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 195) return btnUP;
if (adc_key_in < 380) return btnDOWN;
if (adc_key_in < 555) return btnLEFT;
if (adc_key_in < 790) return btnSELECT;
return btnNONE;
}
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

void setup()
{
lcd.begin(16,2);
lcd.setCursor(3,0);
lcd.print(“Bienvenue”);
delay(1500);
lcd.clear();
lcd.print("<");
lcd.setCursor(3,0);
lcd.print(“Choix menu”);
lcd.setCursor(15,0);
lcd.print(">");

}

void loop()

{

touche_lcd = lecture_bouton_lcd();
switch (touche_lcd)
{
case btnRIGHT:
{

choix++;
if(choix>2){choix=0;}
if (choix==1)
{
lcd.clear();
lcd.print(“Temperature”);

}

else if (choix==2)
{
lcd.clear();
lcd.print(“Luminosite”);
}
break;
}

}
}

mais j’ai toujours des bugs qui font que pour passer du premier au second choix je dois appuyer plus d’une fois.

fais un
Serial.println(choix);
tu vas comprendre.

mais utilise la balise code, <> pour mettre ton code, c’est plus lisible

http://arduino-info.wikispaces.com/LCD-Pushbuttons

Bonsoir j’ai enfin pu retravailler sur mon code ce qui m’a donné ceci:

#include <LiquidCrystal.h>
 
int choix = 1;
int touche_lcd     = 0;
int adc_key_in  = 0;
#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5
 

int lecture_bouton_lcd()
{
 adc_key_in = analogRead(0); 

 if (adc_key_in > 1000) return btnNONE;

 if (adc_key_in < 50)   return btnRIGHT;  
 if (adc_key_in < 195)  return btnUP; 
 if (adc_key_in < 380)  return btnDOWN; 
 if (adc_key_in < 555)  return btnLEFT; 
 if (adc_key_in < 790)  return btnSELECT;   
 return btnNONE;
}
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
 
void setup() 
{
  lcd.begin(16,2);
  lcd.setCursor(3,0);
  lcd.print("Bienvenue");
  delay(1500);
  lcd.clear();
  lcd.print("<");
  lcd.setCursor(3,0);
  lcd.print("Choix menu");
  lcd.setCursor(15,0);
  lcd.print(">");
  

}
 
void loop()

{
 
 touche_lcd = lecture_bouton_lcd();
 switch (touche_lcd)
  {
 case btnRIGHT:
    {
      
      
      if(choix>2){choix=1;}
        if (choix==1)
        {
          
          lcd.clear();
          lcd.print("Temperature");
            
        }
        
        else if (choix==2)
        {
          lcd.clear();
          lcd.print("Luminosite");
        }
        
      }
      break;
      
     
    }
  }

Or cela ne marche toujours pas auriez vous un code d’exemple?

Up

Bonjour,

J’ai créé un code pour la même fonction mais pour un joystick.
Voici le code “vierge”, avec juste les parties :

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);   //Changer les broches en fonction de votre écran (RS, E, D7, D6, D5, D4)

int posJoystick = 0;


void setup(){
    lcd.begin(16, 2);
    //Le reste de votre code d'innitialisation
    }

void loop(){
    posJoystick = analogRead(A0); //a remplacer par bpGauche = digitalRead(pin); et bpDroite = digitalRead(pin);

    if(bpGauche == HIGH){
        //votre code
        }

    else if(bpDroite == HIGH){
        //votre code
        }

    else{
        //votre code
    }
}

Sinon mon programme original se trouve sur mon site à l’adresse suivante :

http://www.divertyrduino.e-monsite.com/pages/projets/menu-sur-ecran-lcd-16-x-2.html