Pour utiliser un écran LCD géré par un chipset Hitachi HD44780 ou compatible, par exemple un écran 2 lignes de 16 caractères très commun et peu cher comme celui-ci :
plusieurs bibliothèques sont disponibles :
- LiquidCrystal qui fait partie du projet officiel
- LiquidCrystalFast
La différence majeure réside au niveau du fonctionnement. Pour faire simple, l’écran met un certain temps à écrire. Il existe une broche qui permet de connaître l’état de l’écran :
- occupé à écrire
- libre
La bibliothèque officielle fonctionne en aveugle, elle impose un délai entre chaque écriture, et ce délai a été estimé pour couvrir le comportement de tous les contrôleurs de LCD, au contraire de la fast qui lit l’état de l’écran pour accélérer l’exécution (environ 8 fois plus rapide).
Dans cet article, nous nous attacherons donc à cette deuxième bibliothèque LiquidCrystalFast plus efficace.
Installation
Cette bibliothèque ne fait pas partie intégrante d’Arduino, elle est donc à installer. 2 choses sont à savoir :
- savoir installer une librairie : Installer une bibliothèque
- connaître le site où la trouver : La bibliothèque LiquidCrystalFast
Sur ce site, vous récupérez les fichiers et le dossier, vous les mettez dans le dossier libraries.
Importer la bibliothèque
#include <LiquidCrystalFast.h>
Cela se fait en début de programme.
Les différentes fonctions
Ce sont les mêmes que la bibliothèque officielle. Il n’y aura pas trop de différences à part l’initialisation de l’écran LCD.
Le principe de base sur ce type d’écran est de placer le curseur, qui peut être visible ou non, puis de demander à écrire un caractère. Les fonctions qui écrivent une chaîne entière incrémentent la position du curseur pour écrire le caractère suivant.
LiquidCrystalFast()
Tout comme dans la bibliothèque Servo, nous allons créer avec cette commande un objet lcd pour commander ensuite l’écran.
LiquidCrystalFast lcd(rs, enable, d4, d5, d6, d7)
LiquidCrystalFast lcd(rs, rw, enable, d4, d5, d6, d7)
LiquidCrystalFast lcd(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7)
LiquidCrystalFast lcd(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7)
L’objet est à créer une seule fois lors de la déclaration des variables. Il y a effectivement plusieurs syntaxes possibles selon le type d’écrans. Cela sera spécifié dans l’article correspondant à celui-ci.
Paramètres
Les paramètres sont les broches de l’Arduino qui sont reliées aux broches du LCD (RS, RW...)
- rs
- rw (optionnel)
- enable
- d0, d1, d2, d3, d4, d5, d6, d7. d0, d1, d2, et d3 sont optionnels ; si ils sont omis, le lcd sera commandé avec les quatre dernières broches.
begin()
Cette fonction initialise l’interface avec le lcd. Elle est nécessaire et à mettre en premier dans le code puisque c’est elle qui spécifie les caractéristiques de l’écran, à savoir le nombre de lignes et de caractères par ligne.
lcd.begin(colonne, lignes);
A placer dans le setup
Paramètres
- colonne : nombres de colonnes (caractères sur la ligne)
- lignes : nombre de lignes disponibles
clear()
Aucun paramètre pour cette fonction qui effectue deux actions :
- comme son nom l’indique, elle efface tout ce qui est écrit sur l’écran
- elle place le curseur pour écrire dans le coin supérieur gauche
lcd.clear();
Cette fonction peut être écrite soit dans le setup ou le loop selon la fréquence dont on veut le résultat escompté.
home()
lcd.home();
Cette fonction replace le curseur en position supérieur et gauche tout comme la fonction clear(), mais sans rien effacer.
setCursor()
Cette fonction sert à placer le curseur à un certain endroit de l’écran. Elle accepte donc deux paramètres à savoir la colonne et la ligne où le curseur doit se mettre.
lcd.setCursor(col, ligne);
N’oublions pas que nous comptons en informatique à partir de 0, ainsi la colonne 1 est dans le code 0 et ainsi de suite, de même pour les lignes. Si on fait une comparaison, lcd.home()
est équivalent à :
lcd.setCursor(0, 0);
Le code lcd.setCursor(0, 1)
mettra le curseur en début de la 2ème ligne.
write()
Cette fonction sert à écrire sur l’écran lcd à la position du curseur. Elle accepte donc comme paramètre ce qu’elle doit afficher.
lcd.write(data);
Ecriture d’un caractère de code ASCII data. La fonction renvoie une valeur (variable de type byte) donnant le nombre de byte affichés sur l’écran (stockage optionnel).
print()
Comme son nom l’indique, cette fonction imprime du texte sur l’écran à partir de la position du curseur. Elle accepte deux paramètres :
- données qui peuvent être de plusieurs types :
- des variables de plusieurs types
- des chaînes de caractères à mettre entre guillemets
- le deuxième est la base de la variable pour afficher la valeur de la variable. C’est un paramètre optionnel :
- BIN pour afficher en base 2 (binaire),
- DEC pour base 10 (décimal),
- HEX pour base 16 (hexadécimal),
- etc
lcd.print("La valeur de lcd ci-après en base 10 :");
lcd.print(lcd, DEC);
cursor() et noCursor()
L’écran affiche le curseur par un underscore ’_’ sur l’écran LCD à la position où le prochain caractère sera affiché. Cette option est activée par le code lcd.cursor()
tandis que l’option est désactivée avec le code lcd.noCursor()
Ces deux fonctions n’acceptent aucun paramètre.
Le comportement de base est noCursor().
blink() et noBlink()
L’écran affiche un curseur clignotant sur la position où le prochain caractère sera affiché, lcd.blink()
active l’option et lcd.noBlink()
la désactive.
Le comportement de base est noBlink(). Bien sûr, le clignotement n’ a pas d’effet si le curseur est désactivé !
display() et noDisplay()
L’écran affiche ou non le texte (sans affecter le rétro-éclairage) mais cela garde en mémoire le texte affiché. lcd.display()
remet à l’écran le texte que l’écran affichait avant le code lcd.noDisplay()
.
Le comportement de base est bien sûr display().
scrollDisplayLeft() et scrollDisplayRight()
Ces fonctions décalent l’ensemble des caractères soit vers la droite pour lcd.scrollDisplayRight()
ou vers la gauche pour lcd.scrollDisplayLeft()
.
A noter que le texte ne se décale pas entre les lignes. Si ce code s’exécute dans une boucle infinie, le texte disparaîtra vers la gauche ou la droite selon le sens de décalage.
autoscroll() et noAutoscroll()
Cette fonction active le défilement automatique du texte. En résumé, le caractère imprimé via la fonction print
est toujours mis au même endroit à la case désigné avec la fonction setCrusor()
. Afin de compléter ce comportement, tout le texte est décalé.
L’exemple fourni avec la bibliothèque place le texte en dernière ligne et dernière colonne et tout le texte est décalé vers la gauche.
La fonction autoscroll()
active ce comportement et noAutoscroll()
le désactive.
leftToRight() et rightToLeft()
Ces fonctions permettent de changer la direction d’écriture sur l’écran lcd :
-
leftToRight()
fait imprimer de gauche à droite -
rightToLeft()
de droite à gauche
createChar()
Cette fonction permet de créer des caractères spéciaux comme des coeurs, des bonhommes ou des smileys.
Cette fonction nous sera probablement peu utile. La meilleure démonstration est donc de transférer dans l’Arduino le programme exemple CustomCharacter.
A noter qu’il existe aussi une bibliothèque TinyLiquidCrystal qui permet de piloter ce même type d’écran à partir d’un ATtiny85...