top of page

Le shield LCD Keypad (LCD + boutons) comporte un écran à cristaux liquides de 2 lignes par 16 caractères et 5 boutons poussoirs. Un sixième bouton (Reset) permet de réinitialiser la carte Arduino. Ce shield intégre également une résistance ajustable permettant de régler le contraste de l'afficheur et une led indiquant que le shield est sous tension.

Ce shield utilise la bibliothèque LiquidCrystal pour gérer l'afficheur avec les fonctions décrites ici. Le brochage du shield pour l'afficheur est le suivant :

LE SHIELD LCD KEYPAD

La broche 10 du shield permet de faire varier l'intensité lumineuse du fond de l'écran.

 

Les 5 boutons (SELECT, LEFT, RIGHT, UP et DOWN) sont associés à des résistances pour former un pont diviseur de tension dont la sortie est branchée à la broche analogique A0 de la carte Arduino. Cette solution permet de limiter le nombre de broches utilisées à une seule au lieu de 5 si nous avions connecté les 5 boutons poussoirs directement sur 5 broches numériques. Une lecture de la tension sur la broche A0 permet de connaître le bouton actif. Avec le shield que je possède, les tensions de sortie sont :

Le programme de test ci-dessous permet de visualiser la tension appliquée sur la broche analogique A0 et la valeur du mot binaire. Nous devons tester le shield que l'on possède car selon le fabricant, les valeurs sont différentes.

​

/*Test_Shield_LCD est un programme qui permet de tester le shield LCD Keypad et de retourner la valeur et la tension de chaque bouton poussoir */

#define bouton A0                                                                // affectation des broches
#define retro 10
#define EN 9
#define RS 8
#define D7 7
#define D6 6
#define D5 5
#define D4 4

int valeur;
float tension;

#include <LiquidCrystal.h>                                              // appel de la bibliothèque
LiquidCrystal lcd(RS, EN, D4, D5, D6, D7);                      // création de l'objet lcd

void setup()
{
  lcd.begin(16,2);                                                               // initialisation de l'objet lcd
  analogWrite(retro,50);                                                   // on paramètre l'intensité lumineuse du fond de l'écran
  lcd.clear();                                                                       // on efface l'écran
  lcd.print("Test Shield LCD");                                          // on écrit ce message sur la première ligne
  delay(2000);                                                                    // pendant 2 secondes
}

void loop()
{
  valeur=analogRead(bouton);                                      // conversion AN              
  tension = map(valeur, 0, 1023, 0, 5000);                   // on calcule la tension
  tension=tension/1000;
  lcd.clear();                                                                    // on efface l'écran
  lcd.print("A0:");
  lcd.print(valeur);
  lcd.setCursor(0,1);                                                      // placement du curseur 2nde ligne 1ère colonne
  lcd.print("Tension:");
  lcd.print(tension);
  lcd.print("V");
  delay(100);
}

Exemple :

Nous souhaitons afficher sur l'écran LCD le nom du bouton actif.

Programme :

/*Shield_LCD est un programme qui affiche le nom du bouton actif */

#define bouton A0                                            // affectation des broches
#define retro 10
#define EN 9
#define RS 8
#define D7 7
#define D6 6
#define D5 5
#define D4 4

#define SELECTION 0                                       // affectation des boutons
#define GAUCHE 1
#define BAS 2
#define HAUT 3
#define DROITE 4
#define AUCUN 5

int valeur;
int touche;

#include <LiquidCrystal.h>                             // appel de la bibliothèque
LiquidCrystal lcd(RS, EN, D4, D5, D6, D7);     // création de l'objet lcd


int lire_bouton()                                                // procédure qui renvoie le bouton actif
{               
    valeur=analogRead(bouton);                       // on lit la valeur de la tension et en fonction de cette valeur, on renvoie le nom
    if (valeur > 1000) return AUCUN;
    if (valeur < 50)   return DROITE;  
    if (valeur < 250)  return HAUT;
    if (valeur < 350)  return BAS;
    if (valeur < 650)  return GAUCHE;
    if (valeur < 850)  return SELECTION;  
    return AUCUN;               
}


void setup()
{
  lcd.begin(16,2);                                               // initialisation de l'objet lcd
  analogWrite(retro,255);                                 // on paramètre l'intensité lumineuse du fond de l'écran
  lcd.clear();                                                       // on efface l'écran
}

void loop()
{            
  lcd.setCursor(0,0);                                         // on place le curseur 1ère ligne 1ère colonne
  lcd.print("Appuyer touche");
  lcd.setCursor(0,1);                                        // on place le curseur 2nde ligne 1ère colonne
  touche=lire_bouton();
  switch (touche)                                             // on affiche le bouton poussoir
       {              
            case DROITE:
                 {             
                 lcd.print("DROITE      ");
                 break;
                 }
            case GAUCHE:
                 {
                 lcd.print("GAUCHE      ");
                 break;
                 }    
            case HAUT:
                 {
                 lcd.print("HAUT        ");  
             break;
                 }
             case BAS:
                 {
                 lcd.print("BAS         ");  
                 break;
                 }
             case SELECTION:
                 {
                 lcd.print("SELECTION   ");  
                 break;
                 }
             case AUCUN:
                 {
                 lcd.print("AUCUN       ");  
             break;
                 }
      }
  delay(100);
}

Liste du matériel :

  • 1 Arduino Uno

  • 1 shield LCD Keypad

bottom of page