Arduino LCD 16x2 lignes parallèles

De FunLab Documentation
Révision datée du 20 avril 2017 à 14:02 par WikiAdmin (discussion | contributions) (Page créée avec « == Arduino et lcd 16x2 lignes: == J'ai deux modèles de LCD: un GMA qui date de mon époque à Vaucanson (snifff), et des 1602 que je viens de recevoir. :ateliers:mater... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à : navigation, rechercher

Arduino et lcd 16x2 lignes:

J'ai deux modèles de LCD: un GMA qui date de mon époque à Vaucanson (snifff), et des 1602 que je viens de recevoir. (liste de matos dispo pour les ateliers)

Ces deux modules sont normalement compatible avec la librairies LiquidCrystal fourni avec l'IDE.

Dans ma vérification de ce fait, et par mon implication dans deux futur projet incluant un LCD, je suis me suis amusé un peu…

Bienvenu dans …

l'Acte 1!

inspiré de [1]

matériel

Trêve de blabla, pour l'acte 1 de cette série de tuto vous aurez besoin:)

  • d'un Arduino Uno R3 (merciiiiii Didier;) )
  • d'un module LCD compatible 1602[ai une dizaine à préter)]
  • d'une breadboard
  • un potard un 10k, ou 25k (apparemment ca marche aussi) ou d'une résistance comblant ce manque! (à calculer pour un contraste moyen)
  • d'un moyen de connexion entre le module LCD et la breadboard: mon gma a des pins males soudées du mauvais coté, en ajoutant un connecteur femelle, ca passe pour moi…

câblage

commencez par… câbler!

Lcd bb.png c'est prêt?

Alors voici le "savant" code pour tester notre bestiole:

code

hello_lcd.ino
/* LiquidCrystal Library - Hello World Demonstrates the use a 16x2 LCD display. The LiquidCrystal library works with all LCD displays that are compatible with the Hitachi HD44780 driver. There are many of them out there, and you can usually tell them by the 16-pin interface. This sketch prints "Hello World!" to the LCD and shows the time. 
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 
* 10K resistor: * ends to +5V and ground 
* wiper to LCD VO pin (pin 3) 
This example code is in the public domain. 
http://www.arduino.cc/en/Tutorial/LiquidCrystal */

// on inclut la bibliothèque
#include <LiquidCrystal.h>

// définit un objet lcd avec les entrées sorties de l'Arduino en paramètre
//RS_pin EN_pin BUS1 BUS2 BUS3 BUS4
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
 // défini le nombre de caractère et de ligne de l'écran
 lcd.begin(16, 2);
}

void loop() {
 //On va d'abord effacer tout les caractères sur l'écran:
 lcd.clear();
 lcd.setCursor(0, 0); //ici, on se positionne en haut à gauche de l'écran
 lcd.print("Hello, funLAB!!!"); //Le texte qu'on affiche sur l'écran à l'endroit positionné
 delay(500); //On attend 500ms 

// Après 500ms d'attente, on affiche la seconde ligne
 lcd.setCursor(0, 1); //On se place sur la deuxième ligne
 lcd.print("salut les geeks!");
 delay(500);
// On attends 500ms, puis on repart en haut de la fonction loop()

 }

résultat

Lcd1stline.gif

Arduino et LCD Acte 2: communication série

Bienvenue dans l'acte 2, bande d'acharné! ^^

(inspiré de http://arduino.cc/en/Tutorial/LiquidCrystal et http://www.ladyada.net/learn/arduino/lesson4.html)

Acte 3 QT et communication série!

matériel et cablage

voir ci dessus

code

serial_lcd.ino


/*
  LiquidCrystal Library - Hello World
 
 Demonstrates the use a 16x2 LCD display.  The LiquidCrystal
 library works with all LCD displays that are compatible with the 
 Hitachi HD44780 driver. There are many of them out there, and you
 can usually tell them by the 16-pin interface.
 
 This sketch prints "Hello World!" to the LCD
 and shows the time.
 
  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
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)
 
 Library originally added 18 Apr 2008
 by David A. Mellis
 library modified 5 Jul 2009
 by Limor Fried (http://www.ladyada.net)
 example added 9 Jul 2009
 by Tom Igoe
 modified 22 Nov 2010
 by Tom Igoe
 
 This example code is in the public domain.

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

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

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


// the setup routine runs once when you press reset:
    
void setup() {
  // set up the LCD's number of columns and rows: 
  Serial.begin(9600);
  lcd.begin(16, 2);//pinMode(redpin, OUTPUT); 
  // Print a message to the LCD.
  lcd.print("hello, world!");
  Serial.println("Tapez quelque chose (pas moi!):");
}

void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  lcd.print(millis()/1000);

    lcd.setCursor(8, 1);
   lcd.print(Serial.readString());

  delay(30);
}

envoi série via l'IDE Arduino

apres avoir téléchargé le programme, l'Arduino devrait redémarrer, puis afficher hello world sur sa première ligne, et la durée d'execution du programme ( en secondes) sur la deuxième ligne.

Jusque là, tout fonctionne comme dans le premier tuto sauf que l'on peut envoyer des données pour les afficher sur le LCD!

Ouvrez le "moniteur série" proposé par l'IDE dans "Outils", l'Arduino devrait redémarrer puis le moniteur devrait afficher: "Tapez quelque chose (pas moi!):"

Et le LCD affiche ce que vous avez tapé!

L'avantage de ca c'est qu'une communication serie entre deux appareils, par exemple, deux Arduino, ou bien plus couramment un ordinateur et un Atmega, ne prendra que trois cables si les deux périphériques sont déja alimentés en courant. C'est le même principe que la communication I2C mais entre deux périphériques seulement.

envoi via une console série: minicom

Fermez L'IDE Arduino SANS débranchez votre carte UNO !

Il y a 40 ans, les réseaux informatiques étaient composés de terminaux, et de serveurs. Un terminal se composait alors d'un clavier, d'un écran 80*24 caractères et d'une interface série.

Un serveur était constitué d'un "superordinateur" (pour l'époque) et de dizaines d'interfaces séries permettant aux terminaux de s'y connecter. C'est aussi le principe du défunt Minitel.

Minicom est un émulateur de terminal, ce qui veut dire que vous transformez votre ordinateur/raspberry pi/Mac en terminal de l'époque, prêt à communiquer via 2 pattes GPIO, une masse commune et un protocole simple permettant de transférer du texte simplement.


Sous Linux (quand même le plus simple des systèmes lorsqu'il s'agit d'expérimenter quelque chose), installez minicom et configurez le. Ctrl+A+O

Descendez sur "Configuration du port série" et appuyez sur entrée.
+-----------------------------------------------------------------------+
A Port série : /dev/ttyUSB0 
B - Emplacement du fichier verrouillage:/var/lock
C - Programme d'appel intérieur : 
D -Programme d'appel extérieur :  
E - Débit/Parité/Bits : 9600 8N1  
F - Contrôle de flux matériel : Non  
G - Contrôle de flux logiciel : Non  
Changer quel réglage ? 
+-----------------------------------------------------------------------+ 
lancer minicom dans un terminal (en root si nécessaire ): minicom -D /dev/ttyUSB0

si le sketch précedant est toujours uploadé sur la carte Arduino, vous avez pu voir que l'outil "console série" de l'IDE affichait "tapez qqchose(pasmoi):" au démarrage. (voir la fonction setup du sketche ci-dessus).

cette fois ci, si Minicom est configuré sur le bon port série (celui affiché/choisi dans l'IDE) en appuyant sur le boutton reset de la carte, minicom affiche:

 tapez qqchose(pasmoi):


Foire Aux Questions

Si vous avez des questions, posez-les ici!