Skip to main content

Bonjour à tous,

J’ai décidé aujourd’hui de vous proposer un tutoriel sur l’utilisation des écrans LCDs.

Je vous propose un « exercice d’application », (TP) qui va vous mener pas à pas à la réalisation d’une barre de chargement sur votre afficheur LCD.

Petite précision avant tout, vous ne pouvez utiliser ici que les afficheurs LCDs normalisés, c’est-à-dire que j’exclus ici les afficheurs de type « nokia 5110 », fiez-vous souvent au prix des afficheurs pour choisir le bon. Pour ma part, l’afficheur « nokia 5110 » à 10€ me paraissait un bon plan, j’ai été déçu d’apprendre que la librairie que nous allons utiliser ici n’était pas compatible. Si vous avez un doute, n’achetez pas trop vite et posez vos questions sur notre forum.

Allez, on y va !!

 

Le tutoriel sera divisé en trois parties :

1- Matériel nécessaire (Hardware)

2- Programmation (Software)

     2.1- La gestion de l’afficheur LCD

       2.2- La gestion des caractères

       2.3- La gestion de la progression

3- Branchements (Hardware)

4- Test

_______________________________________________

1- Matériel nécessaire

Pour suivre ce tutoriel, vous aurez besoin :

– D’un afficheur LCD 4×20 caractères (ou plus grand ou plus petit mais vous devrez adapter le code dans ce cas)

– D’un potentiomètre de 20 kohms

– D’un Arduino

– De fils

– Une plaque de connexion sans soudure « Breadboard » (pas obligatoire mais plus pratique)

2- Programmation

       2.1- La gestion de l’afficheur

Il y a 7 fonctions utiles à connaitre pour la gestion de l’afficheur dans ce TP :

Mise en place de la librairie LiquidCrystal :

#include  //Inclusion de la librairie LiquidCrystal

Précision des pins de connexion de l’afficheur sur l’arduino(rs, enable, d4, d5, d6, d7) en mode 4 bits :

LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //Pins de l'afficheurs lcd

Activation et démarrage de l’afficheur LCD :

lcd.begin(20, 4); //Activation de l'afficheur lcd

Positionnement du curseur :

lcd.setCursor(8, 1); //On place le curseur à la colonne 8, ligne 1

Ecriture d’un caractère ou d’une valeur :

lcd.print(i); //On écrit la valeur de i
lcd.print(«Bonjour») ; //On écrit la lettre « Bonjour »

Effacement des caractères :

lcd.clear(); //Si i = 100, on efface l'écran

Ecriture d’un caractère sous la forme brute :

lcd.write(byte(1)); //On affiche le caractère défini à 1
 

 

2.2- La gestion des caractères

Une structure à connaitre, la création du caractère de chargement (un rectangle plein) où les « 1 » représentent les pixels allumés et les « 0 » les pixels éteint. Cette structure représentera les « pourcentages » remplis sur la ProgressBar :

byte barre[] = { //Création du caractères de chargement
   B111111,
   B111111,
   B111111,
   B111111,
   B111111,
   B111111,
   B111111,
   B111111
};

 

 2.3- La gestion de la progression

 Ici c’est une fonction que j’ai créé pour vous,  je pense que vous avez toutes les clés pour la comprendre :

void affichage(){ //Fonction permettant de gérer l'affichage du caractère de chargement.
  switch(i){
          case 5 :
            lcd.setCursor(0, 2);
            lcd.write(byte(1));
            break ;
        case 10 :
            lcd.setCursor(1, 2);
            lcd.write(byte(1));
            break ;
        case 15 :
            lcd.setCursor(2, 2);
            lcd.write(byte(1));
            break ;
        case 20 :
            lcd.setCursor(3, 2);
            lcd.write(byte(1));
            break ;
        case 25 :
            lcd.setCursor(4, 2);
            lcd.write(byte(1));
            break ;
        case 30 :
            lcd.setCursor(5, 2);
            lcd.write(byte(1));
            break ;
        case 35 :
            lcd.setCursor(6, 2);
            lcd.write(byte(1));
            break ;
        case 40 :
            lcd.setCursor(7, 2);
            lcd.write(byte(1));
            break ;
        case 45 :
            lcd.setCursor(8, 2);
            lcd.write(byte(1));
            break ;
        case 50 :
            lcd.setCursor(9, 2);
            lcd.write(byte(1));
            break ;
        case 55 :
            lcd.setCursor(10, 2);
            lcd.write(byte(1));
            break ;
        case 60 :
            lcd.setCursor(11, 2);
            lcd.write(byte(1));
            break ;
        case 65 :
            lcd.setCursor(12, 2);
            lcd.write(byte(1));
            break ;
        case 70 :
            lcd.setCursor(13, 2);
            lcd.write(byte(1));
            break ;
        case 75 :
            lcd.setCursor(14, 2);
            lcd.write(byte(1));
            break ;
        case 80 :
            lcd.setCursor(15, 2);
            lcd.write(byte(1));
            break ;
        case 85 :
            lcd.setCursor(16, 2);
            lcd.write(byte(1));
            break ;
        case 90 :
            lcd.setCursor(17, 2);
            lcd.write(byte(1));
            break ;
        case 95 :
            lcd.setCursor(18, 2);
            lcd.write(byte(1));
            break ;
        }

Allez, réfléchissez un peu !!

Voila ! C’est terminé !
Vous avez toutes les fonctions et informations nécessaires pour réaliser ce TP.

Bon allez…voici la correction !

correction :

Voici le programme à utiliser :

#include  //Inclusion de la librairie LiquidCrystal
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //Pins de l'afficheurs lcd
int i, j ; //Déclaration de i et j, variables égales à zéro
byte barre[] = { //Création du caractère de chargement
B111111,
B111111,
B111111,
B111111,
B111111,
B111111,
B111111,
B111111
};
void setup() {
lcd.begin(20, 4); //Activation de l'afficheur lcd
}
void loop() {
while(i != 100){
while(i < 100){
lcd.createChar(1, barre); //Déclaration du caractère de chargement
delay(250); //On attends 250 ms
i++ ; //i augmente de 1
lcd.setCursor(8, 1); //On place le curseur à la colonne 8, ligne 1
lcd.print(i); //On écrit la valeur de i
lcd.print("%"); //Puis le signe % (pourcent)
affichage(); //Utilisation de la fonction affichage déclarée plus bas
if(i == 100){
lcd.clear(); //Si i = 100, on efface l'écran
}
}
while(i == 100 && j < 20){
lcd.setCursor(8, 1); //On place le curseur à la colonne 8, ligne 1
lcd.print(i); //On écrit la valeur de i
lcd.print("%"); //Puis le signe % (pourcent)
lcd.setCursor(j, 2); //On place le curseur à la colonne égale à la valeur de j et à la ligne 2
lcd.write(byte(1)); //On affiche le caractère de chargement
j++ ; //j augmente de 1
}
}
}
void affichage(){ //Fonction permettant de gérer l'affichage du caractère de chargement. Je ne la détaillerai pas ici
switch(i){
case 5 :
lcd.setCursor(0, 2);
lcd.write(byte(1));
break ;
case 10 :
lcd.setCursor(1, 2);
lcd.write(byte(1));
break ;
case 15 :
lcd.setCursor(2, 2);
lcd.write(byte(1));
break ;
case 20 :
lcd.setCursor(3, 2);
lcd.write(byte(1));
break ;
case 25 :
lcd.setCursor(4, 2);
lcd.write(byte(1));
break ;
case 30 :
lcd.setCursor(5, 2);
lcd.write(byte(1));
break ;
case 35 :
lcd.setCursor(6, 2);
lcd.write(byte(1));
break ;
case 40 :
lcd.setCursor(7, 2);
lcd.write(byte(1));
break ;
case 45 :
lcd.setCursor(8, 2);
lcd.write(byte(1));
break ;
case 50 :
lcd.setCursor(9, 2);
lcd.write(byte(1));
break ;
case 55 :
lcd.setCursor(10, 2);
lcd.write(byte(1));
break ;
case 60 :
lcd.setCursor(11, 2);
lcd.write(byte(1));
break ;
case 65 :
lcd.setCursor(12, 2);
lcd.write(byte(1));
break ;
case 70 :
lcd.setCursor(13, 2);
lcd.write(byte(1));
break ;
case 75 :
lcd.setCursor(14, 2);
lcd.write(byte(1));
break ;
case 80 :
lcd.setCursor(15, 2);
lcd.write(byte(1));
break ;
case 85 :
lcd.setCursor(16, 2);
lcd.write(byte(1));
break ;
case 90 :
lcd.setCursor(17, 2);
lcd.write(byte(1));
break ;
case 95 :
lcd.setCursor(18, 2);
lcd.write(byte(1));
break ;
}
}
 

3- Branchements

 Afficheur –>; Arduino

Vss –> GND

Vdd –> 5V

V0 (contraste) –> Potentiomètre 20kohms –> GND

RS –> D2

R/W –> GND

E –> D3

DB4 –> D4

DB5 –> D5

DB6 –> D6

DB7 –> D7

Led + –> 5V

Led – –> GND

Les branchements de votre afficheur ne sont pas forcément les mêmes, quoi qu’il en soit, vous retrouverez toujours les pins RS, R/W, E, DB4, DB5, DB6, DB7 sous des noms proches. Consultez toujours les datasheets avant de brancher quoi que ce soit.

4- Test

Reliez votre Arduino à l’USB ou à l’alimentation par connecteur Jack et admirez notre travail !!
La ProgressBar devrait se remplir de rectangles blancs et former une barre de chargement.
N’hésitez pas à poser vos questions en commentaires et à me signaler d’éventuels bugs de programme.

Une photo de mon coté :

TOSHIBA CAMCORDER

Bon Week-end et bon bidouillage à tous !!

Fabien Aubret

Co-fondateur SimpleDuino, Co-fondateur SimpleDomo. Ingénieur de l'Ecole Nationale Supérieure des Arts Et Métiers (ENSAM). Passionné d'électronique, d'informatique et des nouvelles technologies en général, j'ai à cœur de transmettre ce que d'autres ont pu m'apprendre.

3 Comments

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.