Arduino utiliser un écran lcd 16×2

6923

Aujourd’hui on va apprendre à comment utiliser un écran lcd 16×2 avec un arduino.

De temps en temps on a besoin de voir des informations sur un écran, j’ai ajouté le capteur DHT11 pour compléter le tuto.

circuitlcd16x2_final

 

// Made by https://retroetgeek.com
/*
  LiquidCrystal Library - Hello World

  The circuit:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * LCD VSS pin to ground
 * LCD VCC pin to 5V
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)

 http://www.arduino.cc/en/Tutorial/LiquidCrystal
 */

// include the library code:
#include <LiquidCrystal.h>
#include <SimpleDHT.h>  // library for DHT11

// init DHT11
int pinDHT11 = 13;
SimpleDHT11 dht11;

// some sentences
String logo0 = "Bienvenue chez";
String logo1 = "Retro et Geek ";
int scrollMax = 16;

// on initialise la librairie avec les pin arduino utilisés
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// custom scarabe
byte scarabe[8] = {
  B10001,
  B10001,
  B11111,
  B01110,
  B11011,
  B01110,
  B10001,
};
// custom lines
byte lines[] = {
  B00000,
  B11111,
  B00000,
  B11111,
  B00000,
  B11111,
  B00000,
  B11111
};

void setup() {

Serial.begin(115200);
// on crée quelques caractéres speciaux 
// create some char
 lcd.createChar(0, scarabe);
 lcd.createChar(2, lines);
  //On initialise l'ecran ici j'ai un 16 caractere par 2 lignes 
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);

// on positionne le curseur a la colonne 0, ligne 0
// set the cursor to column 0, line 0  
  lcd.setCursor(0, 0);
  for(int y=0;y<16;y++){
    // j'imprime les lignes custom 2
    // Print lines custom 2
    lcd.write(byte(2));
  }
  // on positionne le curseur colonne 0, ligne 1
  // cursor column 0 line 1
  lcd.setCursor(0, 1);
  for(int y=0;y<16;y++){
    lcd.write(byte(2));
  }

  delay(2000);
  // on vide l'ecran
  // clear screen
  lcd.clear();
}

void loop() {

// position 16, ligne 0
// position 16, line 0
lcd.setCursor(16, 0);
//print logo0
lcd.print(logo0);

// position 16, ligne 1
// position 16, line 1
lcd.setCursor(16, 1);
//print logo1
lcd.print(logo1);
// on ajoute le caractere personnalisé
// add custom char
lcd.write(byte(0));

// pour scroller on crée une boucle
// to create a scroll, we create a loop
  for (int positionCounter = 0; positionCounter < scrollMax; positionCounter++) {
    // scroll one position left:
    lcd.scrollDisplayLeft();
    // wait a bit:
    delay(500);
  }

  delay(2000);
  lcd.clear();

// on prepare le dht11
// preparing dht11
  byte temperature = 0;
  byte humidity = 0;
  int err = SimpleDHTErrSuccess;
  // if we dont get value from DHT we return to the begining
  // si nous n'avons pas de valeurs du DHT on reviens au debut avec return
  if ((err = dht11.read(pinDHT11, &temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
    Serial.print("Read DHT11 failed, err="); Serial.println(err);delay(1000);
  }

// on affiche la température ligne 0
// showing temperature line 0
  lcd.setCursor(0, 0);
  lcd.print("Temperature ");
  lcd.print((int)temperature);
  lcd.print(" C");

// on affiche l'humidité ligne 1
// showing humidity line 1
  lcd.setCursor(0, 1);
  lcd.print("Humidite ");
  lcd.print((int)humidity);
  lcd.print(" %");

  delay(4000);

  lcd.clear();
}

En matériel il nous faut :
– 1 arduino
– 1 écran lcd 16×2
– 1 potentiomètre
– 1 résistance 220Ω ou plus
– 1 capteur DHT11 (option)

Pour le câblage beaucoup de fil mais rien de compliqué :
– VSS au GND
– VDD au 5Volt
– V0 au potentiomètre
– RS au pin 12
– RW au GND
– E au pin 11
– D4 au pin 5
– D5 au pin 4
– D6 au pin 3
– D7 au pin 2
– A à la résistance 220Ω
– K au GND
En option DHT11 connecté au pin 13 de l’arduino.

Pour le code on a besoin de “deux” librairies, la librairie LiquidCrystal pour l’écran LCD et de la librairie simpleDHT pour le module température humidité ( rechercher dans le menu gérer les bibliothèques ).
On doit appeler les 2 librairies, pour cet exemple si tu souhaites utiliser seulement l’écran lcd , récupère l’exemple de code de la librairie (HelloWorld).
J’initialise le pin et le DHT avec “simpleDHT11”.

J’ai ensuite deux phrases contenu dans “logo0” et “logo1” et un “scrollMax” pour arrêter une boucle de défilement plus tard.
On initialise l’écran LCD avec les pin utilisés avec “LiquidCrystal lcd(12, 11, 5, 4, 3, 2);”

J’ai créé 2 “caractères” spéciaux , le scarabée de retro et geek qui contient mon dessin en binaire et des lignes dans lines.
Dans le setup je crée les caractères que je vais assigner à “0” pour  le scarabée et “2” pour les lignes, pour les assigner j’utilise “lcd.createChar(0, scarabe);”
On initialisé l’écran avec “lcd.begin(16, 2);” , comme mon écran est un 16 colonnes par 2 lignes on utilise ses valeurs.
Ensuite on place le curseur d’écriture en position 0, ligne 0 avec “lcd.setCursor(0, 0);”, j’utilise une boucle pour écrire mon caractère crée avec des lignes et j’écris sur l’écran le “byte(2)” avec “lcd.write(byte(2));”.
Je fais la même chose pour la ligne 2 mais je positionne le curseur ligne 2 avec “lcd.setCursor(0, 1);”, je termine avec une delay et j’efface mon écran lcd avec “lcd.clear();” .
Dans la boucle loop je positionne le curseur en position 16 ligne 0 avec “lcd.setCursor(16, 0);” et j’imprime logo0 sur l’écran. Même principe sur la ligne 1 mais cette fois ci avec logo1 et je rajoute le caractère créé en byte0 avec “lcd.write(byte(0));” .

J’ai ensuite une boucle pour scroller le texte sur l’écran lcd, ma boucle démarre en position 0 jusqu’à scrollMax et à chaque itération j’applique un “lcd.scrollDisplayLeft();” pour décaler les textes vers la gauche et je rajoute un delay pour visualiser le défilement. Apres cette boucle on met une pause avec un delay et on efface l’écran.

Je prépare le dht11 pour mesurer la température et l’humidité et je termine par un affichage de ses informations sur l’écran lcd ligne 0 et ligne 1.
On fait une pause avec delay , on efface tout et on repart au début du loop.
Télécharger le code :
TutoLCD16x2

N’hésitez pas à poser vos questions sur les réseaux sociaux de la chaîne instagramtwitter , facebook ,youtube ; si vous ne comprenez pas certaines parties du tutoriel n’hésitez pas , me dire ce que vous aimeriez que je crée pour en faire des vidéos tutoriel  et à partager les projets que vous aimeriez créer etc…

Comme toujours allez sur la page de C’est quoi Retro et Geek pour connaître tout ce que je recherche à faire sur la chaîne.

Merci les RetroGeeker et RetroGeekeuse