LCD-Animationen & Spiele mit Arduino UNO erstellen
Komponenten und Zubehör
- Arduino UNO
- Alphanumerisches LCD 16×2 (HD44780-kompatibel)
- Potentiometer 10 kΩ (Kontrast)
- Widerstand 220 Ω (Hintergrundbeleuchtung)
- Steckbrett & Jumper-Kabel
- Taster (für Spielsteuerung)
Apps und Onlinedienste
- Arduino IDE
Projektbeschreibung
Dieses Tutorial vermittelt die Grundlagen von Animationen auf einem 16×2-LCD mit Arduino. Es beginnt bei der Verdrahtung, über einfaches Textausgeben bis hin zu scrollendem Text, benutzerdefinierten Zeichen und schließlich einem kleinen Spiel.
LCD-Verdrahtung (4-Bit-Modus)
| LCD-Pin | Funktion | Anschluss |
|---|---|---|
| 1 | VSS (GND) | Masse-Schiene (Arduino GND) |
| 2 | VDD (+5 V) | Plus-Schiene (Arduino 5 V) |
| 3 | VO (Kontrast) | Schleifer des Potis (Enden an +5 V/GND) |
| 4 | RS | Arduino Pin 12 |
| 5 | R/W | Masse (Schreibmodus) |
| 6 | E (Enable) | Arduino Pin 11 |
| 11 | D4 | Arduino Pin 4 |
| 12 | D5 | Arduino Pin 5 |
| 13 | D6 | Arduino Pin 6 |
| 14 | D7 | Arduino Pin 7 |
| 15 | A (Anode LED+) | +5 V über 220 Ω |
| 16 | K (Kathode LED-) | Masse |
Test: Nach Einschalten muss die untere Zeile dunkel leuchten. Falls nicht: Lötstellen, Verdrahtung, Kontrast prüfen.
Erste Testausgabe
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 4, 5, 6, 7); // rs, e, d4, d5, d6, d7
void setup() {
lcd.begin(16, 2);
lcd.setCursor(0, 1);
lcd.print("Working");
}
void loop() {}
Erscheint „Working“, ist die Verdrahtung korrekt.
Code-Erklärung
LiquidCrystal lcd(12,11,4,5,6,7);– Initialisiert das LCD-Objekt mit den Interface-Pins.lcd.begin(16,2);– Definiert 16 Spalten, 2 Zeilen.lcd.setCursor(0,1);– Setzt Cursor auf Spalte 0, Zeile 1 (zweite Zeile, 0-basiert).lcd.print("Text");– Schreibt Text ab aktueller Cursorposition.
Scrollender Text
Ein Text wandert von rechts nach links über das Display. Kernidee: In einer Schleife den Cursor positionieren, Text ausgeben, lcd.clear() für jedes Frame, Verzögerung für Lesbarkeit.
void loop() {
int n = 15;
char message[] = "scrolling text!";
char *ptr = message;
while (n != -14) {
lcd.clear();
lcd.setCursor(n, 1);
if (n < 0) ptr++;
lcd.print(ptr);
n--;
delay(250);
}
}
Der Pointer ptr wird inkrementiert, sobald der Text links aus dem sichtbaren Bereich ragt, damit der sichtbare Teil korrekt angezeigt wird.
Benutzerdefinierte Zeichen (Custom Characters)
Das HD44780-Controller erlaubt 8 benutzerdefinierte Zeichen (5×8 Pixel). Jedes Zeichen wird als Array von 8 Bytes definiert (1 = Pixel an, 0 = aus). Erstellung z. B. mit LCD Character Creator.
byte dino[8] = {
B01110, B01110, B01100, B01111,
B11101, B01010, B01010, B01010
};
void setup() {
lcd.createChar(0, dino);
lcd.begin(16,2);
lcd.setCursor(0,1);
lcd.write(byte(0));
}
Animation: Pfeil schießen
Drei Custom Characters (Pfeilspitze, Schaft, Ende) werden nacheinander an wechselnden Positionen ausgegeben, was einen fliegenden Pfeil simuliert.
byte arrowhead[8] = { B00001, B00011, B00111, B01111, B00111, B00011, B00001, B00000 };
byte arrowbody[8] = { B00000, B00000, B00000, B11111, B11111, B00000, B00000, B00000 };
byte arrowtail[8] = { B00011, B00111, B01111, B11111, B11111, B00111, B00011, B00000 };
void setup() {
lcd.createChar(0, arrowhead);
lcd.createChar(1, arrowbody);
lcd.createChar(2, arrowtail);
lcd.begin(16,2);
}
void loop() {
int n = 15;
while (n != -1) {
lcd.clear();
lcd.setCursor(0,1);
lcd.write(byte(0));
lcd.write(byte(1));
lcd.write(byte(2));
n--;
delay(50);
}
}
Spiel: Ausweichen (Dodge Game)
Ein „Held“ (Custom Character) steht in Zeile 1. Pfeile fliegen von rechts nach links. Per Taster (Interrupt an Pin 2) springt der Held in Zeile 0. Wird er getroffen, ist das Spiel vorbei. Score wird oben rechts angezeigt.
Wichtige Konzepte:
- Interrupts:
attachInterrupt(0, buttonin, CHANGE);reagiert sofort auf Tastendruck, unabhängig vom Hauptprogramm. - Zufallszahlen:
randomSeed(analogRead(A0))nutzt analoges Rauschen für echte Zufälligkeit;random(15,25)variiert die Pfeilgeschwindigkeit. - Spiel-Logik: Im
while-Loop wird der Pfeil bewegt, Kollision geprüft, Held gezeichnet, Score aktualisiert.
Der vollständige, kommentierte Spielcode ist im Originalartikel enthalten.
Code
Zwei Sketches stehen bereit: einer für die Pfeil-Animation, einer für das komplette Spiel. Beide nutzen die LiquidCrystal-Bibliothek und Custom Characters.
Schaltplan
Der Schaltplan zeigt die 4-Bit-Verdrahtung des LCD, Kontrast-Poti, Hintergrundbeleuchtung und Taster an Pin 2 (Interrupt 0).
Herstellungsprozess
- Arduino-Sensoren: Typen, Anwendungen und reale Projekte
- Handheld-Konsole selbst bauen: Arduboy-Clone (Arduino Micro, OLED, PCB-Design)
- Intelligentes Voltmeter mit Arduino & Smartphone bauen – Einfaches DIY-Projekt
- Arduino Temperatur- & Feuchtelogger mit DHT11 & Ethernet Shield
- Python 3 zu Arduino UNO: Einfache Steuerung & LED-Demo
- Echtzeit-Zelluläre Automaten auf Arduino mit 128x64 OLED-Display
- Kompaktes FM-Radio mit Arduino Nano und RDA5807M selbst bauen
- Zuverlässige Arduino-Wetterstation mit DHT-Sensoren bauen
- Klassisches Arduino-LCD-Arcade-Spiel mit Summer und Joystick bauen
- MKR1000 mit DHT22: Temperatur & Luftfeuchte in Echtzeit an Azure senden