Ecran LCD avec boutons (LCD keypad shield)
bonjour la communauté de l'arduino ! (oui oui je sors
)
j'ai acheté un écran lcd keypad shield il y peu. pour l'essayer, je veux faire deux trois petits trucs un peu inutiles mais qui permettent de tenter de grandes choses par la suite !
alors tout d'abord voilà ce que je veux faire : augmenter ou diminuer unité par unité le chiffre se trouvant au dessus du curseur avec les boutons et down et pouvoir me déplacer sur le chiffre que je veux (en affichant le curseur) avec les boutons left et right.
sur la première ligne à partir du premier caractère, j'affiche dès le début 0000. et ce sont ces chiffres que je peux modifier, mais on choisit toujours le chiffre entre 0 et 9, il n'y pas de "retenues"
alors voilà mon programme et juste après je vous met mon problÈme :
alors le fameux problème : peut importe ou je place mon curseur au début, j'incrémente de 1 et le chiffre va se placer avec le curseur au niveau des centaines... je voudrais qu'il reste là où je lui ai demandé d'être moi...
illustration : 0000 -> 1000 -> 0100 (le trait qui souligne est le curseur, la deuxième étape l'incrémentation et ensuite le résultat final)
je suis perdu... quelqu'un peut m'aider ?
![smiley-sweat :smiley-sweat:](https://forum.arduino.cc/smileys/arduino/smiley-sweat.png)
j'ai acheté un écran lcd keypad shield il y peu. pour l'essayer, je veux faire deux trois petits trucs un peu inutiles mais qui permettent de tenter de grandes choses par la suite !
alors tout d'abord voilà ce que je veux faire : augmenter ou diminuer unité par unité le chiffre se trouvant au dessus du curseur avec les boutons et down et pouvoir me déplacer sur le chiffre que je veux (en affichant le curseur) avec les boutons left et right.
sur la première ligne à partir du premier caractère, j'affiche dès le début 0000. et ce sont ces chiffres que je peux modifier, mais on choisit toujours le chiffre entre 0 et 9, il n'y pas de "retenues"
alors voilà mon programme et juste après je vous met mon problÈme :
quote
//sample using liquidcrystal library
#include <liquidcrystal.h>
// select pins used on lcd panel
liquidcrystal lcd(8, 9, 4, 5, 6, 7);
// define values used panel , buttons
int lcd_key = 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 u = 0 ;
int d = 0 ;
int c = 0 ;
int m = 0 ;
int x = 0 ;
// read buttons
int read_lcd_buttons()
{
adc_key_in = analogread(0); // read value sensor
// buttons when read centered @ these valies: 0, 144, 329, 504, 741
// add approx 50 values , check see if close
if (adc_key_in > 1000) return btnnone; // make 1st option speed reasons since result
// v1.1 threshold
if (adc_key_in < 50) return btnright;
if (adc_key_in < 250) return btnup;
if (adc_key_in < 450) return btndown;
if (adc_key_in < 650) return btnleft;
if (adc_key_in < 850) return btnselect;
// v1.0 comment other threshold , use 1 below:
/*
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;
*/
}
void setup()
{
lcd.begin(16, 2); // start library
//lcd.setcursor(0,0);
//lcd.print("push buttons"); // print simple message
lcd.setcursor(x,0); // move begining of second line
}
void loop()
{
// turn off cursor:
/*lcd.nocursor();*/
/*delay(500);*/
lcd.cursor();
delay(200);
lcd.nocursor();
delay(200);
lcd.setcursor(3,0); // move cursor second line "1" , 9 spaces over
lcd.print(u);
lcd.setcursor(2,0); // move cursor second line "1" , 9 spaces over
lcd.print(d);
lcd.setcursor(1,0); // move cursor second line "1" , 9 spaces over
lcd.print(c);
lcd.setcursor(0,0); // move cursor second line "1" , 9 spaces over
lcd.print(m);
lcd.setcursor(x,0);
lcd_key = read_lcd_buttons(); // read buttons
switch (lcd_key) // depending on button pushed, perform action
{
case btnright:
{
x = x+1;
if(x>3)
x = 0;
lcd.setcursor(x,0);
break;
}
case btnleft:
{
x = x-1;
if(x<0)
x = 3;
lcd.setcursor(x,0);
break;
}
case btnup:
{
if(x=0){
m = m + 1;
if(m>9)
m = 0;
lcd.print(m);
break;
}
if(x=1){
c = c + 1;
if(c>9)
c = 0;
lcd.print(c);
break;
}
if(x=2){
d = d + 1;
if(d>9)
d = 0;
lcd.print(d);
break;
}
if(x=3){
u = u + 1;
if(u>9)
u = 0;
lcd.print(u);
break;
}
}
case btndown:
{
if(x=0){
m = m - 1;
if(m<0)
m = 9;
lcd.print(m);
break;
}
if(x=1){
c = c - 1;
if(c<0)
c = 9;
lcd.print(c);
break;
}
if(x=2){
d = d - 1;
if(d<0)
d = 9;
lcd.print(d);
break;
}
if(x=3){
u = u - 1;
if(u<0)
u = 9;
lcd.print(u);
break;
}
}
case btnselect:
{
// lcd.print("select");
break;
}
break;
}
}
alors le fameux problème : peut importe ou je place mon curseur au début, j'incrémente de 1 et le chiffre va se placer avec le curseur au niveau des centaines... je voudrais qu'il reste là où je lui ai demandé d'être moi...
illustration : 0000 -> 1000 -> 0100 (le trait qui souligne est le curseur, la deuxième étape l'incrémentation et ensuite le résultat final)
je suis perdu... quelqu'un peut m'aider ?
salut,
sauf erreur le fait de faire un print déplace le curseur automatiquement à droite. ajoute simplement un lcd.setcursor(x,0); après les print et ça devrait replacer le curseur au bon endroit.
sauf erreur le fait de faire un print déplace le curseur automatiquement à droite. ajoute simplement un lcd.setcursor(x,0); après les print et ça devrait replacer le curseur au bon endroit.
Arduino Forum > International > Français (Moderators: jfs, Snootlab) > Ecran LCD avec boutons (LCD keypad shield)
arduino
Comments
Post a Comment