Ces afficheurs LCD sont gérés par un bus série I²C que l'on peut commander par les broches SDA & SCL de la carte Arduino :
* pour une carte Arduino Mega, ce sont les broches Digital 20 & 21
* pour une carte Arduino Uno, ce sont les broches Analogiques A4 & A5
* etc…
Bien entendu il est vivement conseillé d'utiliser l'[[https://github.com/technologiescollege/arduino|IDE]][[https://github.com/technologiescollege/arduino| Arduino "TechnoNantes"]] car j'y ai mis à jour les bibliothèques dont vous avez besoin : [[https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads|NewLiquidCrystal]].
==== DE QUOI S'AGIT IL ? ====
En utilisant une communication série comme celle du bus I²C, vous envoyez des données les unes après les autres qui sont interprétées à la volée.
Pour ce genre d'écran,vous avez généralement besoin de connecter 6 broches : RS, EN, D7, D6, D5, et D4 afin de communiquer avec le LCD . Mais l'interface I²C vous permet d'économiser vos connectiques et ne nécessite plus que 2 fils (le bus I2C) pour recevoir les informations à afficher. Et comme il s'agit d'un bus, si vous avez déjà un périphérique I²C, ce module ne vous prendra pas de connectique supplémentaire. \\ Vous pouvez vous connecter directement sur une connectique déportée du bus I²C (shield TechnoZone51, Grove, Tinkerkit, etc) mais aussi par vous même sur la carte Arduino en analysant les données transmises par les différents fils : \\ {{http://arduino-direct.com/p/4-pinCable-Pinout-500.jpg?nolink& |4-pincable-pinout-500.jpg}}{{ http://arduino-info.wikispaces.com/file/view/YwRobotLCD-CU-450.jpg/341645320/YwRobotLCD-CU-450.jpg?nolink&|ywrobotlcd-cu-450.jpg}}
//exemple de la UNO :// \\ GND - GND \\ VCC - 5V \\ SDA - ANALOG Pin 4 \\ SCL - ANALOG pin 5
**NOTE **: sur les cartes pour bus I²C rajoutées à un afficheur nu, vous trouverez un potentiomètre au dos pour ajuster le //**Contraste.**// DOnc si aucun caractère ne s'affiche, pensez à vérifier cela aussi.
Vous trouverez ci-dessous des programmes d'exemples pour des affichages différents. Ils afficheront sur le LCD des caractères que vous tapez sur l'écran du Moniteur série.
**//Les programmes sont issus du site : [[http://arduino-info.wikispaces.com|http://arduino-info.wikispaces.com]]// **
====== Scanner d'adresses I²C ======
Connectez votre écran LCD sur votre shield ou carte Arduino, téléversez le programme ci-après pour qu'il vous liste dans la console //(le port série en haut à droite de l'EDI Arduino)// les adresses trouvées. **ATTENTION **à bien régler la vitesse de la console à 115200bps comme dans le programme.
Le sketch est téléchargeable ici : {{:fr:arduino:scanner_i2c.ino|scanner_I2C.ino}}
====== Afficheur I²C LCD VERSION 1 ======
{{:fr:arduino:ywrobotlcd-cu-450.jpg?direct&450x157|ywrobotlcd-cu-450.jpg}}
==== Exemple de programme pour un afficheur 2 lignes 16 caractères : ====
//(NOTE : il s'agit d'écrans avec au dos une interface nommée// "YwRobot Arduino LCM1602 IIC V1" //ou bien avec seulement //"A0 A1 A2" //comme ci-dessous//)
{{:fr:arduino:lcd-a0a1a2.jpg?nolink&500x225|lcd-a0a1a2.jpg}}
/* YourDuino.com Example Software Sketch
16 character 2 line I2C Display
Backpack Interface labelled "A0 A1 A2" at lower right.
..and
Backpack Interface labelled "YwRobot Arduino LCM1602 IIC V1"
MOST use address 0x27, a FEW use 0x3F
terry@yourduino.com */
/*-----( Import needed libraries )-----*/
#include // Comes with Arduino IDE
#include
// set the LCD address to 0x27 for a 16 chars 2 line display
// A FEW use address 0x3F
// Set the pins on the I2C chip used for LCD connections:
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address
void setup() /*----( SETUP: RUNS ONCE )----*/
{
Serial.begin(9600); // Used to type in characters
lcd.begin(16,2); // initialize the lcd for 16 chars 2 lines, turn on backlight
//------- Quick 3 blinks of backlight -------------
for(int i = 0; i<3; i++)
{
lcd.backlight();
delay(250);
lcd.noBacklight();
delay(250);
}
lcd.backlight(); // finish with backlight on
//-------- Write characters on the display ------------------
// NOTE: Cursor Position: (CHAR, LINE) start at 0
lcd.setCursor(0,0); //Start at character 4 on line 0
lcd.print("Hello, world!");
delay(1000);
lcd.setCursor(0,1);
lcd.print("HI!YourDuino.com");
delay(8000);
// Wait and then tell user they can start the Serial Monitor and type in characters to
// Display. (Set Serial Monitor option to "No Line Ending")
lcd.clear();
lcd.setCursor(0,0); //Start at character 0 on line 0
lcd.print("Use Serial Mon");
lcd.setCursor(0,1);
lcd.print("Type to display");
}/*--(end setup )---*/
void loop() /*----( LOOP: RUNS CONSTANTLY )----*/
{
{
// when characters arrive over the serial port...
if (Serial.available()) {
// wait a bit for the entire message to arrive
delay(100);
// clear the screen
lcd.clear();
// read all the available characters
while (Serial.available()> 0) {
// display each character to the LCD
lcd.write(Serial.read());
}
}
}
}/*
--(end main loop )-- */
==== Exemple de programme pour un afficheur 4 lignes 20 caractères : ====
//(NOTE : il s'agit d'écrans avec au dos une interface nommée// "YwRobot Arduino LCM1602 IIC V1")
/* YourDuino.com Example Software Sketch
20 character 4 line I2C Display
Backpack Interface labelled "YwRobot Arduino LCM1602 IIC V1"
Connect Vcc and Ground, SDA to A4, SCL to A5 on Arduino
terry@yourduino.com */
/*-----( Import needed libraries )-----*/
#include // Comes with Arduino IDE
#include
// set the LCD address to 0x27 for a 20 chars 4 line display
// Set the pins on the I2C chip used for LCD connections:
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address
void setup() /*----( SETUP: RUNS ONCE )----*/
{
Serial.begin(9600); // Used to type in characters
lcd.begin(20,4); // initialize the lcd for 20 chars 4 lines, turn on backlight
// ------- Quick 3 blinks of backlight -------------
for(int i = 0; i<3; i++)
{
lcd.backlight();
delay(250);
lcd.noBacklight();
delay(250);
}
lcd.backlight(); // finish with backlight on
//-------- Write characters on the display ------------------
// NOTE: Cursor Position: Lines and Characters start at 0
lcd.setCursor(3,0); //Start at character 4 on line 0
lcd.print("Hello, world!");
delay(1000);
lcd.setCursor(2,1);
lcd.print("From YourDuino");
delay(1000);
lcd.setCursor(0,2);
lcd.print("20 by 4 Line Display");
lcd.setCursor(0,3);
delay(2000);
lcd.print("http://YourDuino.com");
delay(8000);
// Wait and then tell user they can start the Serial Monitor and type in characters to
// Display. (Set Serial Monitor option to "No Line Ending")
lcd.setCursor(0,0); //Start at character 0 on line 0
lcd.print("Start Serial Monitor");
lcd.setCursor(0,1);
lcd.print("Type chars 2 display");
}/*--(end setup )---*/
void loop() /*----( LOOP: RUNS CONSTANTLY )----*/
{
{
// when characters arrive over the serial port...
if (Serial.available()) {
// wait a bit for the entire message to arrive
delay(100);
// clear the screen
lcd.clear();
// read all the available characters
while (Serial.available()> 0) {
// display each character to the LCD
lcd.write(Serial.read());
}
}
}
}/* --(end main loop )-- */
----
====== Afficheur I²C LCD VERSION 2 : ======
{{:fr:arduino:lcd-arduino-iic-lcd-gy-lcd-v1.jpg?nolink&512x178}}
La carte est estampillée "Arduino-IIC-LCD GY-LCD-V1". //ATTENTION : les fils ne sont pas câblés dans le même ordre !//
==== Exemple de programme pour un afficheur 4 lignes 20 caractères : ====
#include // Comes with Arduino IDE
#include
// set the LCD address to 0x27 for a 20 chars 4 line display
// Set the pins on the I2C chip used for LCD connections:
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x20, 4, 5, 6, 0, 1, 2, 3, 7, NEGATIVE); // Set the LCD I2C address
void setup()
{
Serial.begin(9600);
lcd.begin(20,4);
// NOTE: Cursor Position: CHAR, LINE) start at 0
lcd.setCursor(3,0); //Start at character 4 on line 0
lcd.print("Hello, world!");
delay(1000);
lcd.setCursor(2,1);
lcd.print("From YourDuino");
delay(1000);
lcd.setCursor(0,2);
lcd.print("20 by 4 Line Display");
lcd.setCursor(0,3);
delay(2000);
lcd.print("http://YourDuino.com");
delay(8000);
// Wait and then tell user they can start the Serial Monitor and type in characters to
// Display. (Set Serial Monitor option to "No Line Ending")
lcd.setCursor(0,0); //Start at character 0 on line 0
lcd.print("Start Serial Monitor");
lcd.setCursor(0,1);
lcd.print("Type chars 2 display");
}
void loop()
{
{
if (Serial.available()) {
delay(100);
lcd.clear();
while (Serial.available()> 0) {
lcd.write(Serial.read());
}
}
}
}
----
====== Afficheur I²C LCD VERSION 3 : ======
{{:fr:arduino:lcd-20x4-new3-800.jpg?nolink&800x197}}
Cette fois ci la carte contrôleur au dos est repérée "LCM1602 IIC A0 A1 A2" ( // voir la photo // ) **ATTENTION :** certaines de ces cartes ont les ports A0 A1 A2 qui ne sont pas connectés (//voir la photo//). Ces cartes ont l'adresse I²C 0x27 et pas 0x20. Voici ci-dessous l'exemple de la ligne changée pour corresondre :
LiquidCrystal_I2C lcd(0x20, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
DOIT ETRE REMPLACEE PAR :
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
Les bibliothèques à charger n'ont pas changé. Voici un exemple de programme pour ce type d'afficheur :
#include
#include
// set the LCD address to 0x20 for a 20 chars 4 line display
// Set the pins on the I2C chip used for LCD connections : addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x20, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address
void setup()
{
Serial.begin(9600);
lcd.begin(20,4);
// ------- Quick 3 blinks of backlight -------------
for(int i = 0; i<3; i )
{
lcd.backlight();
delay(250);
lcd.noBacklight();
delay(250);
}
lcd.backlight(); // finish with backlight on
//-------- Write characters on the display ----------------
// NOTE: Cursor Position: CHAR, LINE) start at 0
lcd.setCursor(3,0); //Start at character 4 on line 0
lcd.print("Hello, world!");
delay(1000);
lcd.setCursor(2,1);
lcd.print("From YourDuino");
delay(1000);
lcd.setCursor(0,2);
lcd.print("20 by 4 Line Display");
lcd.setCursor(0,3);
delay(2000);
lcd.print("http://YourDuino.com");
delay(8000);
// Wait and then tell user they can start the Serial Monitor and type in characters to
// Display. (Set Serial Monitor option to "No Line Ending")
lcd.setCursor(0,0); //Start at character 0 on line 0
lcd.print("Start Serial Monitor");
lcd.setCursor(0,1);
lcd.print("Type chars 2 display");
}
void loop()
{
{
if (Serial.available()) {
delay(100);
lcd.clear();
while (Serial.available()> 0) {
lcd.write(Serial.read());
}
}
}
}