Connexion d'un écran de texte à Arduino. LCD à caractères et Arduino

Aujourd'hui, nous allons essayer de nous attarder sur la sortie vers un affichage de texte. La plus populaire est la puce HD44780 (ou KS0066 compatible avec celle-ci). Nous listons leurs avantages et inconvénients :

Avantages:

  1. Bas prix.
  2. Facile à programmer, le code sera le même pour tous les modèles.
  3. Variété de modèles - les plus courants : 8x1, 16x2, 20x4. Vous pouvez également trouver des modèles 40x4 assez exotiques, c'est-à-dire quatre lignes de 40 caractères chacune.
  4. Possibilité de connecter plusieurs écrans à un seul Arduino.
  5. Possibilité de définir vos propres symboles.

Moins :

  1. Tous les écrans ne prennent pas en charge les caractères russes. Pour plus de détails, reportez-vous à la description d'un affichage spécifique.
  2. La connexion sans utiliser le bus I2C nécessite l'utilisation de 10-16 fils, ce qui est très mauvais. avec I2C - 4 fils.

Sur la base de ce qui précède, je n'envisagerai de connecter l'écran que via I2C.

Essayons.

Ce dont nous avons besoin.

  1. Arduino (j'ai pris le modèle Nano)
  2. Affichage sur puce HD44780 avec ou sans module I2C (vous avez alors besoin d'une carte IIC LC1602 séparée) - dans notre cas 16x2 sans module I2C
  3. Résistance 10K (si vous avez besoin d'un contrôle manuel du rétroéclairage).
  4. Potentiomètre (si vous avez besoin d'un contrôle manuel du rétroéclairage).
  5. Planche à pain.
  6. Bibliothèque LiquidCrystal_I2C. http://www.ansealk.ru/files/LiquidCrystal_V1.2.1.zip

Petite digression #1 : Comment distinguer un afficheur avec un module I2C ?

En fait, tout est assez simple. Si, en retournant l'écran, nous voyons un long bloc de connecteurs (généralement 16 pièces), alors il n'y a pas de module I2C sur l'écran :

Et voici à quoi ressemble l'affichage avec le module I2C déjà installé :

Les broches SCL, SDA, VCC, GND sont utilisées pour connecter l'Arduino. Les deux contacts de gauche - sur la photo, ils sont fermés par un cavalier - sont nécessaires au fonctionnement du rétroéclairage.

Si le module n'est pas connecté, vous devrez le faire vous-même. La principale chose à laquelle il faut faire attention est de connecter les contacts dans le bon ordre. En règle générale, les premières et 16 broches sont étiquetées. Parfois, il arrive que les contacts 15-16, à travers lesquels le rétroéclairage est contrôlé, puissent être situés avant le premier (dans ce cas, ils seront numérotés). Sur le module lui-même, la première broche peut également être indiquée non pas par un chiffre, mais par un carré autour de la broche elle-même.

Schème:

Assemblons le schéma suivant :

J'attire votre attention sur les points suivants :

  1. Si vous rencontrez un écran avec un module I2C déjà soudé, les fils marqués en gris ne seront pas nécessaires. Dans le reste - rien ne change.
  2. Si nous ne voulons pas modifier la luminosité de l'affichage, le schéma sera simplifié:

comme vous l'avez remarqué, deux broches du module I2C étiquetées LED sont responsables du rétroéclairage de l'écran. Si nous ne voulons pas utiliser le contrôle de la luminosité, nous pouvons simplement les fermer.

Maintenant, décomposons le code.

Ici, presque tout devrait nous être familier. À la ligne 5, nous indiquons l'adresse de l'appareil. Aux lignes 16 et 17, le nombre de caractères par ligne et le nombre de lignes. Dans les lignes 20-22 - Nous créons un objet pour travailler avec l'affichage et décrivons le paramètre pour travailler avec lui.

Petite parenthèse n°2 : Comment connaître l'adresse d'un périphérique I2C ?

Pour la plupart, l'adresse se trouve dans la fiche technique de la puce sur laquelle le périphérique I2C est construit. Si ce n'est pas possible, voici un lien vers l'archive avec le croquis et les schémas - http://www.ansealk.ru/files/Arduino_lcd_i2c.zip qui détermine les adresses de tous les appareils connectés via le bus I2C. Il vous suffit de connecter l'appareil à l'Arduino, de télécharger le croquis, d'ouvrir la console et de voir l'adresse.

Ici, nous voyons une fonction qui, en fait, s'occupera de la sortie à l'écran. Le principe de sortie ressemble à ceci :

Définissez la position de départ de la sortie à l'aide de la fonction setCursor()

Imprimer une chaîne avec la fonction print()

Après cela, la prochaine fonction print() commencera la sortie à partir de la position suivante après laquelle l'entrée précédente s'est terminée. Notez également que, contrairement à la sortie vers la console, la fonction println() n'est pas utilisée ici pour terminer la sortie et le saut de ligne.

Ainsi, l'inscription "Test LCD1602" apparaîtra sur l'écran dans la première ligne, et la deuxième ligne indiquera la résolution d'affichage et un compteur indiquant combien de cycles notre croquis a fonctionné.

Mais, si nous devons afficher de nombreuses valeurs variables à l'écran, cette méthode n'est pas très pratique. Le fait est que la procédure d'affichage de l'affichage est très énergivore et lente, et nous effectuons la sortie dans cette fonction jusqu'à 7 fois. Il sera beaucoup plus facile de préformer la chaîne à l'avance, puis de la sortir dans son intégralité. La fonction d'entrée formatée sprintf() nous y aidera.

Note latérale #3 : La fonction d'entrée formatée sprintf().

Il y en a plusieurs très fonctionnalités pratiques pour imprimer des chaînes - elles sont appelées fonctions de sortie formatées - printf (des mots print et format). Dans notre cas particulier, nous nous intéressons à la fonction sprintf, qui n'affiche rien à l'écran, mais forme une chaîne pour une sortie ultérieure. Cela ressemble à ceci :

sprintf (str , "Chaîne %d à afficher", i );

La fonction génère une chaîne (marquée en bleu) à l'aide d'un modèle (jaune), dans lequel les valeurs des variables (vert) sont substituées. Le résultat sera écrit dans une variable chaîne (en rouge).

Il peut y avoir plusieurs modèles et variables. Dans ce cas, les variables sont séparées par des virgules. Plus important encore, assurez-vous que le nombre de modèles dans une ligne correspond au nombre de variables. Les variables pour les modèles sont prises séquentiellement, c'est-à-dire la valeur de la première variable est remplacée dans le premier modèle, la valeur de la deuxième variable est remplacée dans le deuxième modèle, et ainsi de suite.

Que sont les modèles ? Tout motif commence par un caractère "%" et se termine par l'un des dix (dans le cas d'Arduino - sept) caractères de type. Entre eux, il peut y avoir beaucoup d'informations sur la façon d'afficher la valeur, ou il peut n'y avoir rien du tout.

Voyons ce qui peut être dans le modèle. En général, le modèle ressemble à ceci :

%[flag ][width ][.precision ]type

Les crochets indiquent que l'élément qu'ils contiennent peut être omis. La barre verticale indique que l'une des valeurs spécifiées doit être sélectionnée dans ce champ (dans notre cas, l'une des lettres H, I ou L).

Traitons d'abord l'élément requis du modèle - le type. Il spécifie quel type de variable sera généré et peut prendre l'une des valeurs suivantes :

Symbole Signification
c Un caractère
s Chaîne de caractères
ré, je Entier décimal signé
o Entier octal
tu Entier décimal non signé
X, X Entier hexadécimal
p Pointeur (hexadécimal)
F Nombre fractionnaire au format fixe
e, e Nombre fractionnaire au format scientifique
G, G Nombre fractionnaire au format scientifique ou fixe

Gray a marqué les types qui ne sont pas applicables lorsque vous travaillez avec Arduino. Ainsi, pour sortir une chaîne, vous devez spécifier "%s" et sortir un entier - "%d".

Ensuite, considérez le champ de largeur. Le nombre qu'il contient indique la largeur minimale du champ dans lequel le modèle sera affiché. Si la taille de la valeur dans la variable est inférieure - le champ sera complété par des espaces, si elle est supérieure - l'enregistrement ira au-delà du champ. Ainsi, le modèle "% 6d" pour le nombre 385 imprimera 385 (notez les trois espaces avant le nombre).

Le spécificateur de précision commence toujours par un point et le nombre qui le suit indique différentes actions selon le type de la valeur. Pour les types "d,o,u,x", il indiquera le nombre minimum de caractères qui doivent apparaître lors du traitement. Pour le type "f" - le nombre de décimales. Pour le type "s", le nombre maximum de caractères de chaîne à sortir. Par exemple, "%6.1f" pour le nombre 34.2345 affichera "34.1" (notez que le point est également considéré comme un signe et qu'il y aura deux espaces avant le nombre). Ou le motif "%.3s" de la chaîne "précision" n'affichera que les trois premiers caractères - "point".

Le drapeau permet de changer l'affichage de la valeur affichée :

Vous pouvez en savoir plus sur les modèles de fonction printf sur Internet. Ici j'ai donné bref examen les fonctionnalités les plus couramment utilisées.

Ainsi, notre fonction de sortie, réécrite pour utiliser une sortie formatée, ressemblera à ceci :

Notez que dans les lignes 33 et 37, nous générons une ligne entière à sortir, et dans les lignes 34 et 38, nous les imprimons.

Enfin, nos fonctions de configuration et de boucle préférées.

À la ligne 47, nous réglons la résolution d'affichage, à la ligne 48, nous allumons le rétroéclairage (dont la luminosité peut être réglée avec un potentiomètre). À la ligne 49, réglez le compteur de boucle sur zéro. Nous l'augmenterons de un à la 37e ligne lors de la sortie (rappelez-vous la construction count++ ?). Enfin, à la ligne 56, nous appelons la fonction d'affichage discutée précédemment. Tous.

Que peut-on changer ou améliorer ?

Par exemple, vous pouvez faire contrôle automatiqueéclairage en fonction de l'éclairement, à l'aide d'une photorésistance ou d'un capteur de lumière de la station météo évoquée dans plusieurs articles précédents. Par exemple, dans une lumière forte - augmentez la luminosité du rétroéclairage et la nuit - réduisez-la. Soit visser un capteur de mouvement et allumer le rétro-éclairage lorsqu'un objet apparaît devant l'écran, soit... De manière générale, je pense que vous avez déjà compris que, si vous le souhaitez, en remplaçant un ou plusieurs composants et en écrivant un morceau de code, vous pouvez sérieusement améliorer la convivialité de l'affichage. Nous pouvons également utiliser des symboles personnalisés à afficher sur l'écran.

Je ne considère pas toutes ces questions ici, car elles dépassent le cadre d'un examen pour les débutants.

Et pour aujourd'hui j'ai tout.

Arduino. Connexion de l'écran LCD

26 notes, Note moyenne : 5 sur 5

LCD affichage arduino vous permet d'afficher visuellement les données des capteurs. Nous vous dirons comment connecter correctement un moniteur LCD à Arduino via I2C et considérerons les commandes de base pour initialiser et contrôler le LCD 1602. Nous considérerons également diverses fonctions dans le langage de programmation C ++, pour la sortie informations textuelles sur l'écran, qui est souvent nécessaire pour être utilisé dans les projets Arduino.

Vidéo. Écran LCD Arduino I2C 1602

Connexion LCD 1602 I2C à Arduino

I2C - bus série à deux fils pour la communication circuits intégrésà l'intérieur appareils électroniques, connu sous le nom de I²C ou IIC (English Inter-Integrated Circuit). I²C a été développé par Philips au début des années 1980 comme un simple bus 8 bits pour la communication interne entre les circuits de l'électronique de commande (par exemple, dans les ordinateurs basés sur cartes mères, V téléphones portables etc.).

Dans un système I²C simple, il peut y avoir plusieurs appareils esclaves et un appareil maître qui initie le transfert de données et synchronise le signal. Plusieurs appareils esclaves peuvent être connectés aux lignes SDA (ligne de données) et SCL (ligne d'horloge). Souvent, le périphérique maître est le contrôleur Arduino et les périphériques esclaves sont l'horloge en temps réel ou l'écran LCD.

Comment connecter LCD 1602 à Arduino via I2C

L'écran LCD 1602 avec module I2C est connecté à la carte Arduino avec seulement 4 fils - 2 fils de données et 2 fils d'alimentation. L'afficheur 1602 est connecté en standard pour le bus I2C : sortie SDA se connecte au port A4, sortie SCL– au port A5. L'écran LCD est alimenté par le port + 5V de l'Arduino. Voir le schéma de connexion du moniteur LCD 1602 sur la photo ci-dessous pour plus de détails.

Pour la leçon, nous avons besoin des détails suivants :

  • carte Arduino Uno / Arduino Nano / Arduino Mega ;
  • moniteur ACL 1602 ;
  • 4 fils "père-mère".

Après avoir connecté le moniteur LCD à Arduino via I2C, vous devrez installer la bibliothèque LiquidCrystal_I2C.h pour travailler avec l'écran LCD via l'interface I2C et la bibliothèque Fil.h(disponible en programme standard EDI Arduino). Vous pouvez télécharger la bibliothèque de travail LiquidCrystal_I2C.h pour LCD 1602 avec le module I2C sur la page Bibliothèques Arduino de notre site Web via un lien direct depuis Google Drive.

Esquisse pour affichage 1602 avec I2C

#inclure // bibliothèque pour contrôler les appareils via I2C#inclure // connecte la bibliothèque pour LCD 1602 LCD LiquidCrystal_I2C (0x27,20,2); // attribue un nom lcd à l'affichage 20x2 void setup() // configuration de la procédure( lcd.init(); // initialisation de l'afficheur LCD LCD rétro-éclairage(); // active le rétroéclairage de l'écran lcd.setCursor(0,0); // place le curseur sur 1 caractère de la première ligne lcd.print("J'AIME"); // affiche le message sur la première ligne lcd.setCursor(0,1); // place le curseur sur 1 caractère de la deuxième ligne lcd.print("ARDUINO"); // affiche le message sur la deuxième ligne) boucle vide () // boucle de procédure ( /* ceci est un commentaire sur plusieurs lignes // initialement la procédure void loop() n'est pas utilisée dans le sketch lcd.noDisplay(); // désactiver le délai de rétroéclairage LCD (500); // pause lcd.affichage(); // active le délai de rétroéclairage LCD (500); // pause */ }

Explications pour le code :

  1. la bibliothèque LiquidCrystal_I2C.h contient de nombreuses commandes pour contrôler l'écran LCD via le bus I²C et vous permet de simplifier considérablement l'esquisse ;
  2. l'esquisse contient un commentaire multiligne /* ... */ , qui vous permet de commenter plusieurs lignes dans le programme à la fois.
  3. avant d'afficher des informations sur l'écran, vous devez définir la position du curseur avec la commande setCursor(0,1), où 0 est le numéro de caractère dans la ligne, 1 est le numéro de ligne.

Dans la leçon, nous parlerons des indicateurs à cristaux liquides synthétisant les signes, en les connectant à la carte Arduino et en contrôlant les indicateurs à l'aide des bibliothèques LiquidCrystal et LiquidCrystalRus.

Les indicateurs LED à sept segments, bien qu'ils soient l'option d'indication la moins chère pour les appareils électroniques, leur utilisation est limitée par deux inconvénients importants.

  • Il est pratiquement difficile de connecter plus de 8 chiffres d'indicateurs LED au microcontrôleur. Nécessite un grand nombre de sorties, des courants de voyants importants, des touches complexes, basse fréquence régénération, etc...
  • Il n'est pas possible d'afficher des informations de caractères sur des affichages à sept segments.

Pour afficher des informations textuelles ou des nombres supérieurs à 4 chiffres, il est beaucoup plus pratique d'utiliser des indicateurs à synthèse de caractères à cristaux liquides (afficheurs). Leurs avantages incluent :

  • interface pratique pour la connexion aux microcontrôleurs ;
  • Basse consommation énergétique;
  • basse tension d'alimentation ;
  • durabilité.

Il existe une grande variété d'écrans à cristaux liquides (LCD) sur le marché. différents fabricants. Presque tous sont similaires dans les paramètres, les signaux d'interface, les commandes de contrôle. DANS ce moment les indicateurs LCD les plus courants sur Marché russe sont des appareils fabriqués par Winstar, Taiwan. Je me référerai aux indicateurs de cette firme. Mais les informations sont tout à fait applicables aux écrans LCD à caractères d'autres fabricants.

Informations générales.

Les indicateurs de synthèse de signes ou symboliques affichent des informations sous forme de familiarité d'une certaine profondeur de bits. Un caractère représente un caractère. Le nombre de familiarité détermine la profondeur de bits de l'indicateur. Les informations sur les indicateurs peuvent être affichées sur plusieurs lignes, ainsi pour les indicateurs de ce type, le nombre de caractères par ligne et le nombre de lignes sont toujours indiqués.

Les informations sont affichées sur une matrice à cristaux liquides avec Rétro-éclairage LED. Le rétroéclairage est le plus Couleurs différentes, qui anime considérablement les informations textuelles monochromes.

Pour contrôler la matrice à cristaux liquides et organiser l'interface de l'indicateur, le contrôleur HD44780 intégré ou son analogues complets. Ce contrôleur définit les signaux d'interface de l'indicateur et les commandes de contrôle.

Le HD44780 est devenu la norme de facto pour les écrans à cristaux liquides (LCD) à caractères. Documentation technique du contrôleur HD44780 Format PDF peut être consulté sur ce lien. Peut-être que quelqu'un aimera la documentation de l'un des analogues de ce contrôleur - SPLC780D. Lien PDF - .

Indicateurs LCD à caractères de Winstar.

Je connais les options suivantes pour les indicateurs LCD de cette société.

type d'indicateur Format d'affichage, caractères x lignes Dimensions, mm Dimensions de la zone visible, mm Lien vers la documentation, format PDF
WH0802A1 8x2 58x32 38x16
WH1202A 12x2 55,7 x 32 46x14.5
WH1601A 16x1 80x36 66x16
WH1601B 16x1 85x28 66x16
WH1601L 16x1 122x33 99x13
WH1602A 16x2 84x44 66x16
WH1602B 16x2 80x36 66x16
WH1602C 16x2 80x36 66x16
WH1602D 16x2 85x30 66x16
WH1602J 16x2 80x36 66x16
WH1602L1 16x2 122x44 99x24
WH1602M 16x2 85 x 32,6 66x16
WH1602O 16x2 85 × 25,2 66x16
WH1602P 16x2 85 × 25,2 66x16
WH1602S 16x2 59 × 29,3 52x15
WH1602T 16x2 65,4 x 28,2 54.8x19
WH1602W 16x2 80x36 66x16
WH1602V2 16x2 66,7 x 23,3 61 × 15,9
WH1604A 16x4 87x60 62x26
WH1604B 16x4 70.6x60 60 x 32,6
WH2002A 20x2 116x37 85x18.6
WH2002D 20x2 89 × 21,5 75x15
WH2002L 20x2 180x40 149x23
WH2002M 20x2 146x43 123x23
WH2004A 20x4 98x60 77 × 25,2
WH2004B 20x4 98x60 77 × 25,2
WH2004D 20x4 77x47 60x22
WH2004G 20x4 87x58 74,4 x 24,8
WH2004H 20x4 87x58 74,4 x 24,8
WH2004L 20x4 146x62.5 123.5x43
WH2402A 24x2 118x36 94.5x16
WH4002A 40x2 182 × 33,5 154,4 x 16,5
WH4004A 40x4 190x54 147 × 29,5

Connexion de l'indicateur LCD au microcontrôleur.

Les schémas de connexion, les chronogrammes, les paramètres de signal, les commandes de contrôle, les codes de caractères sont décrits en détail dans la documentation du contrôleur HD44780. Je ne donnerai que les données les plus nécessaires sur la connexion des indicateurs aux microcontrôleurs.

En règle générale, les indicateurs LCD ont 16 broches.

Numéro de sortie Signal I - entrée O - sortie Affectation des signaux
1 contre - Terre (fil commun)
2 vdd - Alimentation + 5V
3 Vo - Contrôle du contraste de l'affichage. Entrée pour connecter la sortie médiane du diviseur de tension + 5 V. Vous pouvez utiliser une résistance d'ajustement avec une résistance de 10-20 kOhm.
4 RS je Sélection de registre : 0 – registre de commande ; 1 - registre de données. Niveau faible signal signifie qu'une commande a été générée sur le bus de données, haut niveau– données sur le bus.
5 L/E je Sens de transfert :

0 - enregistrement ;

1 - lecture.

De nombreuses applications n'utilisent pas la fonction de lecture, de sorte que le signal est souvent relié à la masse.

6 E je Stroboscope de fonctionnement du bus (sur front descendant).
7 DB0 E/S Bits bas du mode huit bits. Avec une interface à quatre bits, ils ne sont pas utilisés.
8 DB1 E/S
9 DB2 E/S
10 DB3 E/S
11 DB4 E/S Les bits de poids fort du mode huit bits ou les bits de données de l'interface quatre bits.
12 DB5 E/S
13 DB6 E/S
14 DB7 E/S
15 UN - Anode de puissance de rétroéclairage (+).
16 K - Cathode de puissance de rétroéclairage (-). Le courant doit être limité.

Le numéro de broche (première colonne) correspond à la variante la plus courante. Mieux vaut vérifier en téléchargeant la documentation de votre type d'indicateur à partir du tableau de la section précédente.

Les écrans LCD à caractères prennent en charge deux options de connexion au microcontrôleur :

  • Utilisation d'un bus de données 8 bits. Tous les signaux de bus DB0-DB7 sont connectés. Dans un cycle d'échange, un octet d'information est transmis.
  • Utilisation d'un bus de données 4 bits. Seuls les 4 MSB de DB4-DB7 sont connectés. Les informations sont transmises quatre bits par cycle de bus.

La première option permet le transfert de données vers l'affichage avec plus vite. Le second nécessite 4 sorties en moins pour connecter l'indicateur. Sans aucun doute, il est plus important de réduire le nombre de broches de connexion que d'augmenter le taux de change. De plus, les indicateurs LCD sont des appareils plutôt lents avec un temps de cycle de rafraîchissement de 10 à 20 ms.

Connexion d'un écran LCD à caractères (LCD) à la carte Arduino.

Je connecterai l'indicateur WH2004A (4 lignes de 20 caractères chacune) en mode d'échange à quatre bits à la carte Arduino UNO R3. Documents pour affichage LCD WH2004 peut être consulté sur ce lien.

Le schéma ressemble à ceci.

Les résistances R2 et R3 déterminent le contraste de l'indicateur. Vous pouvez connecter une résistance de réglage et régler la clarté d'image requise. J'utilise souvent des indicateurs WH2004 et dans mes circuits, je choisis de telles valeurs de résistance.

J'ai connecté les LED de rétroéclairage des indicateurs à une source d'alimentation de 5 V via une résistance R1 (30 Ohm). Avec cela, j'ai réglé le courant à environ 25 mA. Sombre, mais brillant. On voit bien dans le noir. Bien que les indicateurs WH2004 autorisent un courant de rétroéclairage jusqu'à 580 mA.

Bibliothèque de contrôle des indicateurs LCD dans le système Arduino LiquidCrystal.

Il existe une bibliothèque standard pour contrôler les indicateurs LCD basée sur le contrôleur HD44780. Je vais décrire ses méthodes en détail.

Liquide Crystal(…)

Constructeur de classe. Peut avoir un nombre différent d'arguments.

  • LiquidCristal (rs, en, d4, d5, d6, d7) - interface à quatre bits, le signal RW n'est pas utilisé (connecté à la terre).
  • LiquidCristal (rs, rw, en, d4, d5, d6, d7) - interface à quatre bits, le signal RW est utilisé.
  • LiquidCristal (rs, en, d0, d1, d2, d3, d4, d5, d6, d7) - interface huit bits, signal RW non utilisé (connecté à la terre).
  • LiquidCristal (rs, rw, en, d0, d1, d2, d3, d4, d5, d6, d7) - interface à huit bits, le signal RW est utilisé.

Arguments:

  • rs est le numéro de sortie du signal RS ;
  • rw – numéro de sortie du signal RW ;
  • en est le nombre de signaux de sortie E ;
  • d0, d1, d2, d3, d4, d5, d6, d7 sont les numéros de broches du bus de données.

Affichage LiquidCrystal(6, 7, 2, 3, 4, 5);

void begin(cols, rows)

Initialise l'interface de l'indicateur. Définit la dimension de l'indicateur. La méthode doit être appelée en premier, avant d'utiliser d'autres fonctions de classe.

Arguments:

  • cols - le nombre de caractères dans la chaîne ;
  • lignes est le nombre de lignes.

affichage.begin(20, 4); // utiliser l'afficheur - 4 lignes de 20 caractères

vide clair()

Vider l'écran en plaçant le curseur dans le coin supérieur gauche.

affichage.clear(); // réinitialiser l'affichage

voidhome()

Positionnement du curseur dans le coin supérieur gauche.

disp.home(); // vers le haut de l'écran

void setCursor(col, row)

Place le curseur à la position donnée.

  • col – coordonnée X, numérotation à partir de 0 ;
  • rangée - coordonnée Y, numérotation à partir de 0.

setCursor(0,1); // curseur au début de la deuxième ligne

écriture d'octets (données)

Affiche un caractère à l'écran. Renvoie le nombre d'octets transférés.

Le croquis suivant affiche les données de port série. Les données peuvent être transmises par le moniteur de port Arduino IDE.

// sortie de données du port série sur l'indicateur LCD
#inclure


chardata ;

void setup()
{
Série.begin(9600); // initialiser le port série
affichage.begin(20, 4); //
}

boucle vide ()
{
if (Serial. available()) ( // s'il y a des données
data= Serial.read(); // lit le caractère
if((data != 0xd) && (data != 0xa)) ( // saut de ligne
affichage. écriture (données); // afficher un caractère à l'écran
}
}
}

J'ai un grand indicateur - 4 lignes de 20 caractères. Il dispose de deux contrôleurs HD44780. Par conséquent, les caractères transmis séquentiellement remplissent d'abord la première ligne, puis la troisième, puis la deuxième et la quatrième. Ceux. à travers la ligne. Cette propriété doit être prise en compte pour certains types d'indicateurs. La documentation de chaque indicateur LCD indique la séquence d'adressage des caractères.

impression d'octets (données)

Affiche du texte à l'écran. Renvoie le nombre d'octets transférés.

Arguments:

data - données à afficher à l'écran. Ils peuvent avoir des types char, byte, int, long, string.

Il peut y avoir un deuxième argument facultatif.

impression d'octets (données, base)

  • BASE - définit le système de numérotation :
  • BIN - binaire ;
  • DEC - décimal ;
  • OCT - octal :
  • HEX est hexadécimal.

Un exemple de programme qui imprime une chaîne de texte sur l'écran.

// conclusion chaîne de texte sur l'indicateur LCD
#inclure

Affichage LiquidCrystal(6, 7, 2, 3, 4, 5); // crée un objet

void setup()
{
affichage.begin(20, 4); // initialiser l'afficheur 4 lignes de 20 caractères
disp.print("Tester la chaîne");
}

boucle vide ()
{ }

vider le curseur()

Active le mode d'affichage du curseur. La position où le caractère suivant sera affiché est soulignée.

disp.curseur(); // activer l'affichage du curseur

annuler noCursor()

Désactive l'affichage du curseur.

disp.noCursor(); // désactiver l'affichage du curseur

annuler le clignotement()

Active le mode curseur clignotant. Utilisé conjointement avec la fonction curseur(). Le résultat dépend de modèle spécifique indicateur.

affichage.clignotement(); // activer le curseur clignotant

annuler noBlink()

Désactive le mode curseur clignotant.

disp.noBlink(); // désactiver le curseur clignotant

annuler l'affichage()

Allume l'écran après qu'il a été éteint par la fonction noDisplay(). L'écran affichera les informations qui étaient avant l'arrêt.

display.display(); // allumer l'écran

annuler aucun affichage ()

Éteint l'écran. Les informations sont stockées en mémoire et apparaissent lorsque l'écran est allumé.

disp.noDisplay(); // éteindre l'écran

annuler scrollDisplayLeft()

Fait défiler le contenu de l'affichage d'un caractère vers la gauche.

affichage scrollAfficheGauche(); // tout décaler vers la gauche

annuler scrollDisplayRight()

Fait défiler le contenu de l'affichage d'un caractère vers la droite.

affichage scrollDisplayRight(); // déplacer tout vers la droite

annuler le défilement automatique()

Activer le défilement automatique du texte. À chaque sortie de caractère, tout le texte à l'écran se décale d'un caractère. La direction dans laquelle les informations sont décalées est déterminée par les fonctions leftToRight() et rightToLeft().

affichage défilement automatique()(); // activer le défilement automatique

annuler noAutoscroll()

Désactivez le défilement automatique du texte.

affichage pas de défilement automatique ()(); // désactiver le défilement automatique

annuler leftToRight()

Définit le mode de sortie de test de gauche à droite. De nouveaux symboles apparaîtront à droite des précédents.

de gauche à droite(); // mode de gauche à droite

annuler rightToLeft()

Définit le mode de sortie de test de droite à gauche. De nouveaux personnages apparaîtront à gauche des précédents.

de droite à gauche(); // mode de droite à gauche

void createChar(num, données)

Méthode de création d'un symbole personnalisé. Le contrôleur permet de créer jusqu'à 8 caractères (0…7) d'une taille de 5x8 pixels. L'image du caractère est donnée par un tableau de 8 octets. Les 5 bits les moins significatifs de chaque octet déterminent l'état des pixels de la ligne.

Pour sortir un caractère personnalisé, vous pouvez utiliser la fonction write() avec un numéro de caractère.

// création d'un symbole personnalisé
#inclure

Affichage LiquidCrystal(6, 7, 2, 3, 4, 5); // crée un objet

octet sourire =(
B00000000,
B00010001,
B00000000,
B00000000,
B00010001,
B00001110,
B00000000,
B00000000
};

void setup()
{
disp.createChar(0, sourire); // crée un symbole
affichage.begin(20, 4); // initialiser l'afficheur 4 lignes de 20 caractères
disp.print("Sourire");
affiche.write(byte(0)); // caractère de sortie
}

boucle vide ()
{ }

Voici un exemple de programme qui affiche l'alphabet russe.

// dérivation de l'alphabet russe
#inclure

Affichage LiquidCrystalRus(6, 7, 2, 3, 4, 5); // crée un objet

void setup()
{
affichage.begin(20, 4); // initialiser l'afficheur 4 lignes de 20 caractères
disp.print("abvgdejzijklmnoprst");
disp.print("ABCDEJZYKLMNOPRST");
disp.print("uhhhhhhhhhhhhhhh");

Catégorie: . Vous pouvez mettre en signet.

Basés sur le contrôleur HD44780, les écrans LCD 1602 sont toujours l'un des écrans les plus abordables, les plus simples et les plus demandés pour développer tout type d'appareils électroniques aujourd'hui. Il n'est pas surprenant qu'ils puissent être vus à la fois dans des unités simples assemblées littéralement sur le genou et dans des unités industrielles plus sérieuses, telles que des machines à café. C'est avec un tel affichage que les modules et shields les plus populaires sur le thème Arduino sont assemblés, par exemple, le module LCD I2C et le LCD Keypad Shield.

Cet article explique en détail avec des images comment connecter un LCD à Arduino et afficher des informations.

1602 écrans ont deux versions différentes:

Rétroéclairage jaune avec lettres noires
- ou (cela arrive beaucoup plus souvent) rétroéclairage bleu avec du blanc.

Les dimensions des écrans du contrôleur HD44780 sont très différentes, mais ils sont contrôlés de la même manière. Les dimensions les plus courantes sont 16 par 02 (c'est-à-dire 16 caractères sur deux lignes) ou 20 par 04. Les caractères eux-mêmes ont une résolution de 5 par 8 pixels.

La plupart des affichages ne prennent pas en charge le cyrillique (à l'exception des affichages de marquage CTK). Mais un tel problème est partiellement résoluble, puis l'article détaille comment le faire.

L'écran dispose d'un connecteur à 16 broches pour la connexion. Les conclusions ont marquage au dos de la planche, il est le suivant :

1 (VSS) - puissance à moins pour le contrôleur.
2 (VDD) - alimentation positive pour le contrôleur.
3 (VO) - paramètres de contrôle du contraste.
4 (RS) – sélection pour le registre.
5 (R/W) - lecture et écriture, en particulier, écriture lorsqu'il est connecté à la terre.
6 (E) – activation (activer).
7-10 (DB0-DB3) - bits bas de l'interface huit bits.
11-14 (DB4-DB7) - bits les plus significatifs de l'interface
15 (A) - anode positive pour alimenter le rétroéclairage.
16 (K) - cathode négative pour alimenter le rétroéclairage.

Étape 2 : connexion de l'écran LCD

Avant de connecter l'écran et de lui transférer des informations, il convient de vérifier ses performances. Tout d'abord, appliquez une tension aux contrôleurs VSS et VDD, allumez le rétroéclairage (A, K), puis réglez le contraste. Pour de tels réglages, un potentiomètre de 10 kΩ convient, sa forme n'a pas d'importance. + 5V et GND sont appliqués aux jambes extrêmes, et la jambe au centre est connectée à la sortie VO.

Lorsque l'alimentation est appliquée au circuit, il est nécessaire d'obtenir le contraste nécessaire, s'il est mal réglé, l'image sur l'écran ne sera pas visible. Pour régler le contraste, il faut "jouer" avec le potentiomètre. Lorsque le circuit est correctement assemblé et que le contraste est correctement réglé, rangée du haut l'écran doit se remplir de rectangles.

Pour que l'affichage fonctionne, l'Arduino intégré est utilisé. Environnement EDI bibliothèque spéciale LiquidCrystal.h, dont je parlerai ci-dessous. Il peut fonctionner en mode 8 bits et 4 bits. Dans la première variante, seuls les bits bas et hauts (BB0-DB7) sont utilisés, dans la seconde, seuls les bits bas (BB4-DB7).

Mais en appliquant le mode 8 bits dans cet affichage - mauvaise décision, il n'y a presque aucun avantage en termes de vitesse, puisque son taux de mise à jour est toujours inférieur à 10 fois par seconde. Pour afficher du texte, vous devez connecter les broches DB7, DB6, DB5, DB4, E et RS aux broches du contrôleur. Vous pouvez les connecter à n'importe quelle broche Arduino, l'essentiel est de définir la séquence correcte dans le code.

Si le caractère requis n'est pas encore dans la mémoire du contrôleur, il peut être déterminé manuellement (jusqu'à sept caractères au total). La cellule des affichages considérés a une extension de cinq par huit points. La tâche de créer un symbole consiste à écrire un masque de bits et à en placer des aux endroits où les points devraient brûler et des zéros là où ils ne le devraient pas.

Le schéma de connexion décrit ci-dessus n'est pas toujours bon, car l'Arduino utilise au moins six sorties numériques.

Étape 3 : Schéma de contournement

Explorons un moyen de contourner cela et de nous débrouiller avec seulement deux. Un module convertisseur LCD vers IIC/I2C supplémentaire est nécessaire. La façon dont il est soudé à l'écran et attaché à l'Arduino peut être vue dans les images ci-dessous.

Mais cette option de connexion ne fonctionne qu'avec la bibliothèque spéciale LiquidCrystal_I2C1602V1, qui est cependant facile à trouver sur le Web et à installer, après quoi vous pouvez l'utiliser sans problème.

Étape 4 : Bibliothèque LiquidCrystal.h

La bibliothèque LiquidCrystal.h peut être téléchargée à partir de la ressource officielle - . Vous pouvez également télécharger à partir des liens ci-dessous :

Esquisser

Une fois que vous avez téléchargé l'archive, remplacez le dossier LiquidCrystal dans le dossier bibliothèques de votre répertoire d'installation Arduino.

Vous pouvez voir un exemple de croquis dans Fichier -> Exemples -> LiquidCrystal -> HelloWorld_SPI(Fichier -> Exemples -> LiquidCrystal -> HelloWorld_SPI).

Ceci conclut notre prochaine leçon. Nous vous souhaitons des projets de qualité !

Comment se lier d'amitié avec une carte Arduino avec un affichage de caractères ? Assez simple! Tout est ci-dessous dans l'ordre et avec des détails.

Si vous souhaitez recevoir des informations d'Arduino sans vous connecter à un ordinateur et sortir sur un port série, vous pouvez utiliser un affichage de caractères. Ce n'est pas si difficile à faire. La commodité tirée de la communication est inestimable.
Pour le travail, j'ai utilisé un écran LCD à caractères J204A basé sur la puce HD44780, souvent trouvé sur eBay sous le nom de LCD2004. 4 lignes de 20 caractères, inversées. Acheté avec un tas d'autres sur eBay, pour quelques centimes, de 60 à 100 roubles pièce. La langue russe n'est pas prise en charge par défaut, mais c'est un problème résoluble, plus à ce sujet la prochaine fois. Et les connecteurs sur le schéma ne sont pas soudés, il faudra travailler avec un fer à souder.
La bibliothèque est utilisée pour travailler avec des écrans. LiquidCrystal.h inclus dans l'IDE Arduino par défaut.

Mais je n'ai pas trouvé de fiche technique pour l'écran LCD2004, mais sur Internet, il y a beaucoup de tableaux sur l'écran. Mais ils ne diffèrent pratiquement pas les uns des autres. Le contrôle et la connexion sont complètement identiques. La différence réside uniquement dans le nombre de lignes/caractères à l'écran. Mais cela n'affectera absolument pas si vous avez 1602.

Tous les contacts sont définis dans le tableau. Si vous prenez l'écran et que vous le tournez vers vous, les contacts seront situés de gauche à droite, respectivement, dans le tableau où ils vont en nombre croissant. Dans la colonne des contacts, entre parenthèses, la désignation dans la fiche technique est indiquée.

# Contacts A quoi sert Note
1 VSS (VSS) TERRE. Terre. Afficher l'alimentation du microcontrôleur. 0V
2 VDD (VCC) Tension d'alimentation pour le microcontrôleur d'affichage. +5V
3 V0 (VEE) Contraste des caractères à l'écran. Il est préférable de se connecter via un potentiomètre. de 0v à +5V
4 RS (RS) Enregistrez la sélection.
5 RW (R/W) Commutation du mode lecture/écriture. Glissons-le au sol, nous n'avons qu'à transmettre des informations à l'écran. 0-écriture + 5V-lecture
6 E Pointage
7 D0 (DB0) Données
8 D1 (DB1) Transfert de données. (Ne pas utiliser) Données
9 D2 (DB2) Transfert de données. (Ne pas utiliser) Données
10 D3 (DB3) Transfert de données. (Ne pas utiliser) Données
11 D4 (DB4) Données
12 D5 (DB5) Transfert de données. (Engagé) Données
13 D6 (DB6) Transfert de données. (Engagé) Données
14 D7 (DB7) Transfert de données. (Engagé) Données
15 A (DEL+) Tension + 5V, rétroéclairage de l'écran, la luminosité de l'écran peut être ajustée via un potentiomètre. +5V
16 K(DEL-) GND Masse, rétroéclairage de l'affichage 0V

v

Le transfert de données vers l'afficheur est possible en deux versions : 8 et 4 bits par cycle. Parce que Arduino a peu de contacts, nous en utiliserons 4 - c'est plus que suffisant pour mettre à jour les informations sur l'écran à une vitesse au-delà de la perception.

C'est ainsi que j'ai tout connecté. Cela peut sembler chaotique, mais il y a un système. Vous pouvez sélectionner des fils rouge, vert, jaune et orange. Les rouges vont toujours à + 5V, les verts vont à GND, et les jaunes et oranges sont les fils de connexion à l'Arduino, qui transportent des données.

La partie la plus importante est connexion physique afficher. Cliquez pour ouvrir dans haute résolution où tout est clairement visible.
R1 - Résistance 200OM. Résistance limitant le courant traversant le rétroéclairage de l'afficheur.
R2 - Potentiomètre avec résistance jusqu'à 10kOM. On roule le stylo, on sélectionne le contraste des caractères.


Et un croquis extrêmement simple pour afficher quelques lignes à l'écran.

H> // Nous connectons la bibliothèque pour travailler avec l'affichage. /* LCD LiquidCrystal (rs, activer, d4, d5, d6, d7); créer variable de type LiquidCrystal Et nous déterminons par quels contacts l'Arduino fonctionne avec l'écran. plus d'informations sur cette commande ici http://arduino.cc/en/Reference/LiquidCrystalConstructor */ LiquidCrystal lcd(6, 7, 8, 9, 10, 11); void setup() ( lcd.begin(20, 4); // définit les caractéristiques d'affichage (20 caractères par ligne, 4 lignes) // Pour l'affichage 1602, spécifiez lcd.begin(16, 2); lcd.setCursor(1, 1); // Spécifiez à partir de quelle position commencer à produire du texte. les lignes et les caractères commencent à partir de 0 !!! // 1 déplacera déjà le caret d'une division depuis le début de l'écran et décalera le texte d'une ligne en dessous de lcd.print( "compblog.vlukyanov" ); // imprime le texte à partir de la position spécifiée. lcd.setCursor(7, 2); // imprime à partir du 8e caractère à l'écran sur la troisième ligne. lcd.print(".com") ; // texte à imprimer. ) void loop() ( // ne rien faire d'autre dans la boucle, tout est déjà fait lors de l'initialisation de la carte. )

Résultat. Si vous savez comment tout cela se connecte et comment écrire du code, le temps pour tout le travail est de 5 minutes.

De plus, l'écran peut exécuter certaines fonctions par lui-même et il est également possible de définir certains paramètres.

Par exemple:

  • Faites défiler le texte ;
  • Clignotement de la position du curseur ;
  • Allume / éteint.

Et maintenant le bonus !
Le rétroéclairage de l'écran consomme de l'énergie, ce qui, par exemple, voudrait économiser sur la batterie. J'ai fait cette option pour moi-même - lorsque vous appuyez sur le bouton, le rétroéclairage de l'écran s'allume pendant 5 secondes.

H> // Nous connectons la bibliothèque pour travailler avec l'affichage. bouton intInt = 0 ; // Numéro d'interruption à appeler. int screenLed = 4 ; // Le numéro de la broche à laquelle l'écran est connecté. +5V volatil long x = 5000 ; // variable pour stocker le temps LiquidCrystal lcd(6, 7, 8, 9, 10, 11); void setup() ( attachInterrupt(buttonInt, screenon, FALLING); // paramètres d'interruption lcd.begin(20, 4); pinMode(screenLed, OUTPUT); digitalWrite(screenLed, HIGH); // activer l'affichage lcd.setCursor( 0 , 0); lcd.print("Start screenon test!"); ) // La fonction qui sera exécutée lorsque le bouton sera cliqué. void screenon() ( x = millis()+5000; // Souvenez-vous du temps nécessaire pour éteindre le rétroéclairage. Temps d'exécution actuel +5 secondes. digitalWrite(screenLed,HIGH); // Appliquez une tension au rétroéclairage de l'affichage. ) void loop () ( lcd.setCursor(0, 2); // aller à la troisième ligne lcd.print(x); // et imprimer l'heure à laquelle l'affichage s'éteint lcd.setCursor(0, 3); // aller à la quatrième ligne lcd.print( millis()); // print heure actuelle fonctionne si (x< millis()) // если время работы выключения наступило >( digitalWrite (screenLed, LOW); // puis éteint l'affichage ) )

Et le résultat :