L’objectif de ce tutoriel est d’apprendre à afficher un message sur son écran LCD en utilisant le module I2C spécial pour LCD. Pour réaliser ce tutoriel, nous avons rencontré quelques difficultés comme pour afficher un mot en entier avec seulement la fonction print() de la Librairie LiquidCrystal. Nous avons donc fait le choix de décortiquer chaque message caractère par caractère afin de contourner ce problème. Ceci permettra de résoudre quelques problèmes que vous aussi vous avez pu rencontrer.
Si votre écran LCD ne possède pas de connexion I2C, suivez ce lien.
Matériel
- Une arduino Nano (dans l’exemple nous utilisons une Nano mais toute carte Arduino comportant un port I2C convient)
- Un écran LCD avec son module I2C
- Connecteurs
Schéma électronique
Connectez les ports I2C de l’écran LCD aux ports I2C de l’Arduino Nano ou du Shield Nano utilisé.
- GND avec la masse Arduino GND
- Vcc reliée au 5V
- SCL reliée à la broche A5
- SDA reliée à la broche A4
Installation de la bibliothèque LCD I2C
Pour pouvoir utiliser l’afficheur, la bibliothèque LiquidCrystal_I2Cdoit être installée :
Ouvrez l’IDE Arduino et aller dans Croquis > inclure une bibliothèque > Gérer les bibliothèques
Dans le gestionnaire de bibliothèques, recherchez «LiquidCrystal_I2C» et installez LiquidCrystalI2C:
Code
Dans le code suivant, un message va s’allumer une fois au démarrage et un autre va s’afficher en boucle.
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x20,16,2); // set the LCD address to 0x20(Cooperate with 3 short circuit caps) for a 16 chars and 2 line display char buff[16]; // char buffer for sprintf String msg = "Arduino running"; unsigned int count=0; unsigned long previousTime=0; void setup(){ lcd.init(); // initialize the lcd lcd.backlight(); lcd.setCursor(0,0); lcd.print("Arduino starts "); delay(2000); } void loop(){ lcd.setCursor(0,0); lcd.print(msg); }
Remarque
Si vous rencontrez des problème pour affihcer le texte et ne voyez apparaître que la première lettre du message. Vous pouvez essayer d’afficher les caractères un par un.
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x20,16,2); // set the LCD address to 0x20(Cooperate with 3 short circuit caps) for a 16 chars and 2 line display char message[16]="Arduino running"; void setup(){ lcd.init(); // initialize the lcd lcd.backlight(); } void loop(){ int len = strlen(message); for (int k=0; k<len; k++) { lcd.setCursor(k,0); lcd.print(message[k]); } }
Bonus: utiliser sprintf pour placer les caractères correctement
Grâce à la fonction sprintf vous pouvez spécifier la longueur de la chaine écrite et placer les caractères à l’intérieur. Dans le code suivant, vous avez deux méthodes pour afficher le compteur. observé la différence
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x20,16,2); // set the LCD address to 0x20(Cooperate with 3 short circuit caps) for a 16 chars and 2 line display char buff[16]; // char buffer for sprintf String msg = " Arduino running"; unsigned int count=0; unsigned long previousTime=0; void setup(){ lcd.init(); // initialize the lcd lcd.backlight(); lcd.setCursor(0,0); lcd.print(" Arduino starts "); delay(2000); } void loop(){ if(millis() - previousTime>=500){ // every 500ms previousTime=millis(); lcd.setCursor(0,0); lcd.print(msg); lcd.setCursor(0,1); //lcd.print("Counter : ");lcd.print(count); // to compare with next line sprintf(buff, "Counter : %3d ", count); // use sprintf to place the characters correctly lcd.print(buff); count++; } }
Application
- Créer une interface pour votre projet Arduino