Home Artikel Arduino in der Praxis Teil 2 – Unterstützung für SHIELD-LCD16x2 Overlay von...

Arduino in der Praxis Teil 2 – Unterstützung für Olimex SHIELD-LCD16x2 Overlay mit LCD-Bildschirm und 4 Tasten.

arduino

Der vorherige Artikel, den Sie hier finden, enthielt eine Beschreibung des LCD-Anzeigemoduls. Darin zeigen wir, wie man den Bildschirm mit dem Arduino UNO-Board verbindet und die Grundlagen seiner Bedienung mit dem Programm. Geben wir jedoch zu, dass der Bildschirm selbst bei vielen Geräten nicht viele Anwendungen finden wird, da ein so einfaches LCD-Modul keine Einstellungseinstellungen zulässt. Dazu ist eine Tastatur notwendig, auf die wir in einem der folgenden Artikel näher eingehen werden, verwenden wir aber jetzt eine fertige Lösung aus dem Arduino-Ökosystem – ein Board der Marke Olimex mit dem Namen SHIELDLCD16x2.

222223 zusätzlich. Das Board verfügt über einen PIC-Prozessor, der über die TWI-Schnittstelle mit dem Arduino UNO kommuniziert. Dank des Zugriffs auf die Funktionsbibliothek sollte der Umgang mit diesem Modul mit einem eingebetteten Mikrocontroller keine größeren Probleme bereiten. Beginnen wir mit der Vorbereitung des Moduls für die Arbeit.

Vorbereitung zum Arbeiten mit der Olimex-Platte

Die Vorbereitung des Moduls für den Betrieb besteht aus zwei Schritten: Hardware und Software. Der erste ist trivial: Stecken Sie einfach die Kappe in das Arduino UNO-Board und Sie können loslegen. Die zweite erfordert jedoch die Installation der Bibliothek, die die Handhabungsfunktionen des Moduls enthält.

Um die Bibliothek zu installieren, gehen Sie auf die Website des Modulherstellers, dh der Firma Olimex. Geben Sie dann im Suchfeld (neben der Schaltfläche Suchen) den Namensteil des Moduls „LCD16x2“ ein (Abbildung 1). Klicken Sie auf die Schaltfläche Suchen. Zum Zeitpunkt des Schreibens dieses Textes zeigt die Suchmaschine zwei Ergebnisse: Wir haben uns für „SHIELD-LCD16x2“ entschieden.

Arduino Board
Abbildung 1. Snippet der Olimex-Website mit Suchfeld

Unterhalb der Modulbeschreibung finden wir den Block „SOFTWARE“ (Abbildung 2). Jede Textzeile in diesem Feld ist auch ein Link zu einer Datei, die von der Olimex-Website heruntergeladen werden kann. Im Moment interessieren wir uns für den Link „OLIMEXINO-328+SHIELD-LCD16x2 – eine Bibliothek und ein Set von Demo-Beispielen“.

Laden Sie die unter diesem Link verfügbare ZIP-Datei auf die Festplatte Ihres Computers herunter. Natürlich lohnt sich auch ein Blick auf die verfügbaren Beispiele, aber für unsere Zwecke reicht es aus, die im Verzeichnis LCD16x2 abgelegte Bibliothek zu installieren.

Arduino IDE ermöglicht verschiedene Möglichkeiten, Bibliotheken zu installieren. In diesem Fall ist es am einfachsten, die Quellen in das Projektverzeichnis hochzuladen, das auch das Unterverzeichnis „libraries“ enthält. Das Verzeichnis zum Speichern des Projekts wird bei der Installation der Arduino IDE erstellt und normalerweise von Windows (in der polnischen Version des Systems) im Unterverzeichnis Dieser Computer → Dokumente → Arduino abgelegt. Um die Bibliotheksquellen zum heutigen Beispiel hinzuzufügen, verschieben Sie einfach das Verzeichnis LCD16x2 in den Ordner ibraries. Sobald dies erledigt ist, führen wir die Arduino IDE aus.

Arduino-Schild
Abbildung 2. Für das Modul verfügbarer Beispielprogrammblock.

SHIELD-LCD16x2 – Tastenstatus lesen

Bevor Sie mit der Arbeit an Ihrem eigenen Programm beginnen, sollten Sie sich mit Beispielen für die Verwendung der Funktionen der Bibliothek LCD16x2.h vertraut machen, die im Beispielkatalog verfügbar sind. Dies ist eine viel effektivere Lernmethode als das Lesen von Dokumentationen, aber es lohnt sich auch, sich daran zu erinnern.

Wie bereits erwähnt, kommuniziert das Shield über eine serielle Schnittstelle mit dem UNO-Board. Es ist also leicht zu erraten, dass die im vorherigen Artikel beschriebenen Funktionen geändert werden müssen, da sie eine parallele 4-Bit-Schnittstelle verwenden. Wir können davon ausgehen, dass der Mikrocontroller in der Schildplatine auf die gleiche Weise mit dem LCD-Zeichenanzeigemodul kommuniziert, aber unsere Arduino UNO es "sieht" den Bildschirm nicht und die Steuerung ist indirekt. Daher muss das Programm gestartet werden, indem die entsprechenden Dienstbibliotheken für die serielle Schnittstelle und das auf der Abschirmung montierte Anzeigemodul angeschlossen werden.

#enthalten #enthalten

Um die Dinge einfach zu halten und nicht den langen Bibliotheksnamen verwenden zu müssen, lohnt es sich, ihr einen Alias ​​lcd zu geben. Wir verwenden es und schreiben den Namen der Bibliotheksfunktion nach dem Punkt.

LCD16x2-LCD;

Wie wir uns aus dem vorherigen Artikel erinnern, Programme, die für Arduino erstellt wurden Sie sind in zwei Teile unterteilt: die Initialisierungsfunktion und die Endlosschleife. Die Befehle des ersten werden innerhalb der Funktion void setup() und des zweiten void loop() eingegeben. Befehle, die in der Setup-Funktion enthalten sind, werden innerhalb der Endlosschleife nur einmal ausgeführt – für die gesamte Dauer des Programms.

Die Initialisierungsfunktion initialisiert die TWI-Schnittstelle, löscht das LCD-Display und schaltet die Display-Hintergrundbeleuchtung auf volle LED-Lichtintensität ein (Parameter 0 – schaltet die Hintergrundbeleuchtung aus).

void setup () {Wire.begin (); //TWI-Schnittstelle initlcd.lcdClear(); // LCD-Bildschirm clearlcd.lcdSetBlacklight (255); //maximale Hintergrundbeleuchtung an}

Im Falle der Olimex-Platte, wenn keine Taste gedrückt wird, gibt die Lesetaste-Funktion nur Einsen zurück, während das Drücken der Taste das zugehörige Bit zurücksetzt.

Die Funktion readButtons() gibt eine Variable vom Typ int zurück und ihr Aufruf sieht so aus:

Variable = lcd.readButtons ();

Es ist möglich, mit Bits zu arbeiten, die logische Nullen sind, aber es ist viel bequemer und einfacher, sie später zu analysieren, wenn das entsprechende Bit gesetzt ist. Der Einer-Komplement-Aufruf:

variabel =~ variabel;

Wenn das Bit gesetzt ist, ist es bequem, seinen Pegel mit dem logischen Produkt zu testen. Es ist nur wahr, wenn beides der Fall ist. Aufeinanderfolgende Bitpositionen können mit Hilfe von Konstanten überprüft werden: 0x01 für ein Bit an Position 0, 0x02 – an Position 1, 0x04 – an Position 2, 0x08 – an Position 3 usw. Natürlich spielt es keine Rolle, ob Sie Hexadezimal-, Binär- oder Dezimalzahlen verwenden, aber mit etwas Übung lassen sich Hexadezimalzahlen leicht schreiben. Es ist ersichtlich, dass die folgenden Hexadezimalzahlen, die zum Testen der Bitposition verwendet werden, Potenzen von 2 sind.

Buttons = lcd.readButtons();if (Buttons & 0x01) gedrückt = 1;else if (Buttons & 0x02) gedrückt = 2;else if (Buttons & 0x04) gedrückt = 3;else if (Buttons & 0x08) gedrückt = 4 ;sonst gedrückt = 0;

Die Variable buttons enthält Informationen über die gedrückten Buttons. Wenn Sie if…else verwenden, wird die Schaltfläche beendet, wenn die Bedingung erfüllt ist. Das verkürzt die Arbeitszeit des Programms, hat aber auch den Nachteil, dass die Tasten irgendwie ihre Hierarchie haben und es nicht möglich ist, den Zustand von zwei oder mehr gedrückten Tasten auszulesen, ähnlich wie bei der Kombination von Shift- und Strg-Tasten bei einem PC.

Die Maske 0x01 entspricht dem ersten Button links und 0x08 dem rechten Button. Das Programm nummerierte die Schaltflächen und gab der gedrückten Variablen einen Wert, der der herkömmlichen Schaltflächennummer entspricht. Dann wird diese Nummer auf dem LCD an der Position angezeigt, die mit der ersten Reihe und der ersten Spalte beginnt. Die Meldung wird nur angezeigt, wenn der Wert von „Pressed“ nicht 0 ist. Andernfalls wird die Meldung „No button“ angezeigt, die Sie darüber informiert, dass keine Taste gedrückt wurde. Die Meldung endet mit drei Leerzeichen, damit die letzten Zeichen der Zeichenkette gelöscht werden, wenn das längere „1 wird gedrückt“ überlappt.

lcd.lcdGoToXY(1, 1);if (gedrückt != 0){lcd.lcdWrite(gedrückt);lcd.lcdGoToXY(2, 1);lcd.lcdWrite(" wird gedrückt");}else lcd.lcdWrite(" Nobutton «);

Die vollständige Skizze finden Sie in den Materialien, die dem Artikel beigefügt sind. Wir kompilieren es und senden es an den Speicher des Mikrocontrollers Arduino UNO mit dem Tastaturkürzel Strg+U (Sketch → Upload).