Contrôler un Ecran LCD 16*2 sur Arduino en affichant différents messages avec appui bouton poussoir.
Ce que nous allons faire :
Afficher un message d’accueil
Gérer différents affichages lorsque l’on appui sur un bouton poussoir
Gérer la luminosité de l’écran via le potentiomètre.
Matériels :
Un Arduino
Un écran Lcd (exemple ici)
Un potentiomètre 10K (exemple ici).
2 résistances 220 ohm
1 bouton poussoir
Des fils de connexions
Une breadboard
Ou à défaut, vous pouvez vous rendre sur le site de Tinkercad pour réaliser vos montages !
Vous pouvez suivre cette vidéo youtube ou continuer l’article !
Etape 1 : Le montage
Voici l’image du montage global :
Vous pouvez également la télécharger en meilleur qualité ici au format png :
Pour ce montage, vous pouvez le décomposer en 3 parties :
- La gestion du potentiomètre
- La gestion du bouton poussoir
- La gestion de l’écran LCD
Etape 2 : Le code
Initialisation et affichage de notre premier message :
#include <LiquidCrystal.h>
// pin de l'écran LCD
int pin_RS = 12;
int pin_E = 11;
int pin_DB4 = 5;
int pin_DB5 = 4;
int pin_DB6 = 3;
int pin_DB7 = 2;
// pin du bouton
int buttonPin = 8;
// gestion de l'écran à afficher
int display = 1;
// initialisation de l'écran
LiquidCrystal lcd(pin_RS, pin_E, pin_DB4, pin_DB5, pin_DB6, pin_DB7);
void setup() {
Serial.begin(9600);
pinMode(buttonPin, INPUT);
lcd.begin(16, 2);
lcd.print("Bienvenue !");
}
void loop() { }
Ici ce que je fais :
- j’inclus la librairie LiquidCrystal qui nous permettra de gérer notre écran LCD.
- j’affecte les pins utilisés pour notre écran ainsi que pour notre bouton poussoir.
- je créé un integer pour gérer l’écran que je vais vouloir afficher. Par défaut, ici je dis que l’écran que je vais vouloir afficher lorsque j’appuierai plus tard sur mon bouton poussoir, sera l’écran 1.
Puis dans notre fonction Setup() :
- j’initialise mon bouton
- j’initialise mon écran lcd qui contient 16 charactères et 2 lignes par défaut.
- J’écris un premier message qui s’affichera dès que j’aurai lancé mon programme Arduino.
- J’écris ma fonction obligatoire loop() qui pour le moment ne fait rien.
Si je lance désormais mon programme, voici ce qui apparaitra sur mon écran :
Parfait ! Maintenant gérons les différents affichages grâce à notre bouton poussoir :
Gestion des différents affichages lorsque l’on appuie sur notre bouton poussoir :
Nous allons gérer les différents affichages au sein de notre fonction loop() comme ceci :
void loop() {
if (digitalRead(buttonPin) == HIGH && display == 1)
{
lcd.clear();
lcd.print("Ecran 1 :ligne 1 ");
lcd.setCursor(0,1);
lcd.print("Ecran 1 :ligne 2");
display = 2;
delay(500);
}
if (digitalRead(buttonPin) == HIGH && display == 2)
{
lcd.clear();
lcd.print("Ecran 2");
display = 1;
delay(500);
}
}
Ici :
Si j’appuie sur mon bouton poussoir et que l’écran que je veux afficher est l’écran 1, alors :
- Je supprime l’affichage précédent via
lcd.clear()
afin que mon nouvel affichage ne se superpose pas au précédent.
- j’écris un premier message via
lcd.print()
qui sera par défaut sur la première ligne de mon écran.
- Je positionne mon curseur tout à gauche de l’écran (charactère 1 donc comme pour les tableaux, à 0) et sur la 2ème ligne de mon écran via
lcd.setCursor(0,1);
- Une fois mon curseur positionné, je peux de nouveau écrire un message
- Je dis que le prochain écran que je veux afficher lorsque j’appuierai sur mon bouton sera l’écran 2 via
display = 2
- Je mets un delay à 500 pour la gestion matériel de l’Arduino.
J’obtiens donc :
Si j’appuie de nouveau sur le bouton et que mon écran à afficher est l’écran 2 alors :
- Je fais la même chose que précédemment, mais j’imprime un message différent et surtout, je dis que le prochain écran que je vais vouloir afficher si j’appuie sur mon bouton poussoir, sera de nouveau l’écran 2.
J’obtiens donc :
Le code entier :
#include <LiquidCrystal.h>
// pin de l'écran LCD
int pin_RS = 12;
int pin_E = 11;
int pin_DB4 = 5;
int pin_DB5 = 4;
int pin_DB6 = 3;
int pin_DB7 = 2;
// pin du bouton
int buttonPin = 8;
// gestion de l'écran à afficher
int display = 1;
// init de l'écran
LiquidCrystal lcd(pin_RS, pin_E, pin_DB4, pin_DB5, pin_DB6, pin_DB7);
void setup() {
Serial.begin(9600);
pinMode(buttonPin, INPUT);
lcd.begin(16, 2);
lcd.print("Bienvenue !");
}
void loop() {
if (digitalRead(buttonPin) == HIGH && display == 1)
{
lcd.clear();
lcd.print("Ecran 1 :ligne 1 ");
lcd.setCursor(0,1);
lcd.print("Ecran 1 :ligne 2");
display = 2;
delay(500);
}
if (digitalRead(buttonPin) == HIGH && display == 2)
{
lcd.clear();
lcd.print("Ecran 2");
display = 1;
delay(500);
}
}