2 caractère sur ecran LCD avec boutons :(

Bonjour à tous.

Je suis en train de réaliser un projet pour faire un compteur sur LCD avec les boutons poussoir inclus. Deux problèmes surviennent :
-1) L'orsque je reste appuyé sur le bouton les nombres défillent et je voudrais que qu'ils n'augmentent que d'un.
-2) Je voudrais aller de 0 à 99 car je n'arrive qu'a aller jusqu'à 9.

Merci à ceux qui m'aideront et voici le code :

#include <ColorLCDShield.h>   
LCDShield lcd;
int x;  
int buttonPins[3] = {3, 4, 5};

void setup ()
{
  lcd.init (PHILIPS);   
  lcd.contrast (-80);     
  lcd.clear(EMERALD);
  int AffichageVariable(x);  
  pinMode(buttonPins[3], INPUT);
  digitalWrite(buttonPins[3], HIGH);
}

void loop ()
{
  while(digitalRead (buttonPins[1]))
 AffichageVariable(x);
 x+=1;
 delay(500);
 if(x>9){
   x=0;
 }
}



void AffichageVariable(int x)
{
  char xChar[3] = {
    0,0,0};

  
  xChar[2] = x;
  
  
  
  
  for (int i=0; i<3; i++)
    xChar[i] += 0x30;
    
  lcd.setStr(xChar, 20, 50, BLUE, WHITE);
}

Salut,

Alors déjà :

int buttonPins[3] = {3, 4, 5};

pinMode(buttonPins[3], INPUT);
 digitalWrite(buttonPins[3], HIGH);

je ne pense pas que ça soit ça que tu veuilles. La tu ne configure que le pin à l'index 3. Donc deux problèmes :

  1. l'index 3 n'existe pas dans ton tableau. Il y a 3 index mais en partant de 0
  2. tu ne vas configurer que l'index 3, et non pas les 3 pins

Pour faire ce que tu veux il faut passer par une boucle :

for (int i =0;i<3;i++) {
pinMode(buttonPins[i], INPUT);
 digitalWrite(buttonPins[i], HIGH);
}

Ensuite solution simple pour ton problème d'appui :

if(digitalRead(buttonPins[1])) {

 AffichageVariable(x);

if(x++>99)  x=0;

while(digitalRead(buttonPins[1])); //on boucle tant que le bouton est appuyé

delay(50) // limite les effet de rebond 

}

Merci beaucoup ! Ca fonctionne ! :slight_smile:

Ceci dit une fois arrivé à 9, le conpteur ne va pas à 10.... Il y a des caractères divers. :~

Saurais-tu comment régler le problème ? Merci d'avance ! :stuck_out_tongue:

void AffichageVariable(int x)
{

char maChaine[3]; // je déclare une chaine vide
itoa (x, maChaine,10 ); // conversion integer en chaine de caractère, 10 c'est pour base 10, décimal donc

lcd.clear(); // j'efface l'écran pour ne pas surcharger
lcd.setStr(machaine, 20, 50, BLUE, WHITE);

}

En remplacant ma void affichage par la tienne j'ai ce message d'erreur.

Affichage_variable4.ino: In function 'void AffichageVariable(int)':
Affichage_variable4:39: error: no matching function for call to 'LCDShield::clear()'
C:\Documents and Settings\Master\Mes documents\Arduino\libraries\ColorLCDShield/ColorLCDShield.h:364: note: candidates are: void LCDShield::clear(int)
Affichage_variable4:40: error: 'machaine' was not declared in this scope

Suffit de lire ce qui est dit :

no matching function for call to 'LCDShield::clear() => la fonction n'existe pas mais il est gentil puisqu'il te dit :
note: candidates are: void LCDShield::clear(int) => il faut rajouter un argument. On va alors voir la lib :
https://github.com/sparkfun/ColorLCDShield/blob/master/firmware/Arduino/libraries/ColorLCDShield/ColorLCDShield.h
Et on voit que la fonction exige une couleur et en en-tête on trouve une série de #define pour les couleur

deuxième erreur :

Affichage_variable4:40: error: 'machaine' was not declared in this scope => machaine n'existe pas, en revanche, maChaine :wink:

void AffichageVariable(int x)
{

char maChaine[3]; // je déclare une chaine vide
itoa (x, maChaine,10 ); // conversion integer en chaine de caractère, 10 c'est pour base 10, décimal donc

lcd.clear(BLACK); // j'efface l'écran pour ne pas surcharger
lcd.setStr(maChaine, 20, 50, BLUE, WHITE);

}