Eigene LCD-Menüs auf Arduino mit XOD erstellen – ohne Programmieren
Komponenten und Zubehör
| Arduino UNO | 1 |
| DFRobot Arduino LCD/Keypad Shield | 1 |
Apps und Online-Dienste
- XOD Environment (visuelle Programmierung)
Über dieses Projekt
Moderne Arduino-Mikrocontroller bieten beachtliche Rechenleistung für gleichzeitige Überwachung und Steuerung diverser Hardware und Sensoren. Die grafische XOD-IDE vereinfacht Rapid Prototyping, doch mit wachsender Komplexität stellt sich die Frage der Benutzerführung: Wie Informationen anzeigen und logisch steuern? Dedizierte Taster reichen für einfache Projekte, doch bald fehlen Platz und logische Anordnung. Displays sind die Lösung – wie bei Mikrowellen mit Menüs für Einstellungen. Zwar kann zu tiefes „Menu-Diving“ die UX beeinträchtigen, doch menügeführte Interfaces sind bei komplexen Projekten unverzichtbar.
Software-Frameworks für Menüs in C/C++ haben oft steile Lernkurven und sind schwer schnell anzupassen, da alles mit allem verknüpft ist. Ziel dieses Projekts: XOD nutzen, um menügeführte Interfaces per Drag-and-Drop/WYSIWYG schnell zu prototypen. Ein- und Ausgänge der Menüstruktur sind modular und generisch – nutzbar mit vielfältigen Eingaben (Taster, Encoder) und Ausgaben (Text-LCDs, andere XOD-untersützte Displays).
Unbekannt mit XOD? Zuerst Tutorials auf xod.io ansehen.
Beispiel-Sketch: Menü-Controller & Menübaum
Menü-Controller-Sektion (rechts im Patch)
Vier Knoten kaskadiert:
- Analog-Eingang – verbunden mit Arduino A0. Das LCD/Keypad-Shield legt unterschiedliche Spannungen für jede Taste (hoch, runter, links, rechts, select) auf A0.
- Tasten-Decoder – wandelt Spannungen in Pulse für jede Taste um. Einstellbarer „Timeout“ für Entprellung.
- Menü-Controller – verarbeitet Pulse, handhabt Navigation im Menübaum und Zustandsänderungen. Akzeptiert einen Zahlenwert (z. B. Potentiometer) als änderbaren Parameter. Bei Auswahl eines „Blatt“-Menüs (Endknoten) gibt dieser einen Puls und Parameteränderung aus.
- 16×2 LCD-Controller – Standardbibliothek, austauschbar gegen andere Displays.
Menübaum-Sektion (oben im Patch)
Baumartige Struktur mit drei Knotentypen:
- Blatt (Leaf): Endmenü, keine orangenen Eingänge – repräsentiert Aktion/Parameter.
- Zweig (Branch): Hat Ein- und Ausgänge – Auswahl mehrerer Untermenüs.
- Konkatenation (Concat): Gruppiert Untermenüs und speist sie in einen Zweig ein.
„Invoke“ bei einem Zweig steigt in dessen Untermenü ab (statt Ausgabe zu erzeugen). Verschachtelung beliebig tief (Sub-Sub-Menüs), begrenzt nur durch RAM/Flash des Arduino.
Ausgabe-Sektion
Blatt-Menüs geben Pulse aus, die über Bus an Flip-Flops gehen – schalten digitale Pins (Relais, LEDs). Pulse sind allgemein nutzbar: z. B. Parameter in XOD-Buffer speichern für spätere Nutzung.
Bekannte Probleme
- Mindestens ein Zweig-Knoten nötig für Kompilierung (meist gewünscht).
- „Top“-Menü-Eingang (Zurück zum Titel) noch nicht implementiert.
- 4-Zeilen-Displays vom Controller unterstützt, aber Blatt-Interface für 4 Zeilen fehlt.
- RAM-Overhead durch Strings: Workaround mit Flash-String-Knoten (Code-Duplikation nötig, String im C++-Code des Knotens editieren).
- „ID“-Eingang von Blatt/Zweig noch funktionslos – geplant für Positionsverfolgung in Untermenüs.
Weiterentwicklung
- Weitere Tests auf anderen Arduino-Plattformen (ARM etc.)
- Mehr Menü-Knotentypen für vielfältigere Ein-/Ausgaben
- RAM-Reduktion durch Compile-Time-Metaprogrammierung, mehr Daten in Flash
Zweites Beispiel (19.02.2019)
Menü-Controller nimmt externen/internen Wert (hier Counter mit Clock) entgegen, zeigt aktuellen/vorherigen Wert im Menü, speichert neuen Wert per „Invoke“ in Buffer.
„Invoked“- und „Param“-Ausgänge von Blatt „A“ gehen an Buffer-Knoten. Buffer-Ausgang zurück zur Anzeige (mit Defer-Knoten gegen Feedback-Loops). Neuer Wert wird gespeichert und sofort angezeigt.
Code
XOD Menu System Library
https://xod.io/libs/bitrex/xod-menu-system-11
In XOD: Datei → Bibliotheken hinzufügen → „bitrex/xod-menu-system“
Schaltplan
Direct in XOD IDE öffnen: xodmenusystemrev1_1_4-1-19_fLVYrcSgbX.xodball
Herstellungsprozess
- DTMF-Decoder mit Arduino bauen – ganz ohne zusätzlichen IC
- Monitor-Ambilight selbst bauen mit Arduino Nano & WS2812B LEDs
- Ultraschall-Schwebegerät mit Arduino bauen – Akustische Levitation Schritt für Schritt
- LCD-Animationen & Spiele mit Arduino UNO erstellen
- Intelligentes Voltmeter mit Arduino & Smartphone bauen – Einfaches DIY-Projekt
- Echtzeit-IoT-Herzfrequenzmonitor mit Arduino & MAX30100
- Arduino UNO WiFi Webserver: LED per Browser steuern
- Intelligenter Parkplatzzähler: Echtzeit-Fahrzeugverfolgung mit Arduino, Processing & PHP
- Arduino-gesteuertes automatisiertes Chrome Dino-Spiel bauen
- Kompaktes FM-Radio mit Arduino Nano und RDA5807M selbst bauen