Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Codefreie LCD-Menügenerierung mit XOD

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1
DFRobot Arduino LCD/Keypad Shield
× 1

Apps und Onlinedienste

XOD-Umgebung

Über dieses Projekt

Die Prozessoren, die die Arduino-Entwicklungsboards antreiben, sind nicht die Mikrocontroller Ihres Großvaters - sie haben eine beachtliche Rechenleistung und können verwendet werden, um viele Arten von physischer Hardware und Sensoren gleichzeitig zu überwachen und zu steuern. Die grafische XOD-Programmier-IDE für Arduino kann die Aufgabe des Rapid-Prototyping-Hardwaredesigns vereinfachen, aber mit zunehmender Komplexität eines Systems stellt sich das Problem der Benutzersteuerung und des Informationsmanagements – wie Informationen über den gesteuerten Prozess für die Anzeige angeordnet und dem Benutzer überlassen werden können logisch steuern. Dedizierte Tasten und Schalter eignen sich für einfache Projekte, aber es gibt bald keine logischen Möglichkeiten, sie anzuordnen (oder sie auf einem Gehäuse zu platzieren). Viele Designs verwenden ein Display, um diese Art von Feedback zu geben, selbst ein Mikrowellenherd hat normalerweise ein kleiner Bildschirm, der das Bearbeiten von Einstellungen und die Eingabe von Garzeiten ermöglicht, und während zu viel "Menütauchen" für den Zugriff auf obskure Einstellungen die Benutzererfahrung beeinträchtigen kann, sind menügesteuerte Schnittstellen für Projekte aller Art eine Tatsache.

Software-Frameworks zur Entwicklung menübasierter Schnittstellen in C oder C++ für Mikrocontroller haben oft eine steile Lernkurve und können schwierig sein, schnelle Designänderungen vorzunehmen, da oft alles mit allem anderen interagiert. Das Ziel dieses Projekts war es, die grafische XOD-Programmierumgebung zu verwenden, um die Möglichkeit zu bieten, menügesteuerte Schnittstellen für Arduino-kompatible Mikrocontroller-Projekte mithilfe einer Drag-and-Drop/WYSIWYG-Schnittstelle schnell zu prototypieren. Die Ausgabe- und Eingabeparameter der generierten Menüstruktur sind modular und generisch und sollen mit den unterschiedlichsten Eingabequellen (Schalter, Taster, Encoder) verwendet werden können und ergeben eine Folge von Klartextausgaben, die einer breiten Masse zugeführt werden können Vielzahl von XOD-unterstützten Anzeigetypen, einschließlich mehrzeiliger Text-LCD-Module, wie in diesem Beispiel verwendet.

Wenn Sie mit der XOD-Umgebung dieses Projekts nicht vertraut sind, sehen Sie sich bitte zuerst die Tutorials für dieses Projekt auf xod.io an.

Es folgt ein Screenshot einer einfachen motivierenden Beispielskizze. Wir werden dieses XOD-Patch-Diagramm Abschnitt für Abschnitt durchgehen, um zu erklären, wie alles zusammenpasst.

  • Das Menü Controller-Schnittstellenabschnitt

Auf der rechten Seite des Patch-Bearbeitungsbildschirms in XOD befinden sich vier Knoten, die in absteigender Weise verbunden sind. Von oben nach unten gibt es zuerst einen analogen Eingangsknoten, der ausgewählt ist, um mit einem der analogen Eingangsports des Arduino verbunden zu werden. In meinen Tests habe ich ein Arduino Uno mit einem ATMega328 8-Bit-Prozessor verwendet, auf dem ein 16x2-LCD-/Tastaturschild angeschlossen ist. Die Tastatur auf dem Shield ist über die Shield-Pins mit dem analogen Eingang "A0" des Arduino verbunden, und die Hardware erzeugt Spannungen unterschiedlicher Pegel, um dem Arduino zu signalisieren, welche Tasten auf dem Pad gedrückt sind.

Abgesehen von der "Reset" -Taste auf der Tastatur, die nicht direkt mit der Arduino-Skizze verbunden ist, bietet diese Art von Anzeigeschild vier Richtungstasten - nach oben, unten, links und rechts, eine "Auswählen" -Taste. Der zweite vom analogen Eingangsknoten gespeiste Knoten enthält einen Code, der die unterschiedlichen Spannungen entsprechend den einzelnen Tasten decodiert und Trigger vom Impulstyp ausgibt, je nachdem, welche Taste gedrückt wird. Ein "Timeout"-Eingang wird bereitgestellt, damit ein XOD-Entwickler das Entprell-Timeout der LCD-Schirmtastatur anpassen kann, um ein falsches Auslösen zu vermeiden, angepasst an die Taste oder den Schaltertyp einer bestimmten Anwendung.

Der dritte Knoten unten ist ein Knoten vom Menüsteuerungstyp, der Code enthält, um Impulsauslöser von der Steuertafel zu akzeptieren und die Logik des Benutzers zu handhaben, der durch den Menübaum navigiert und Auswahlen trifft, die Zustandsaktualisierungen des Menübaums erzeugen.

In der derzeit implementierten Form akzeptiert es eine einzelne Zahleneingabe, bei der es sich um einen beliebigen Parameter handeln kann, den der Benutzer über eine externe Steuerung ändern kann, beispielsweise ein Potentiometer oder eine Wählscheibe auf einem Bedienfeld, die einen Parameter darstellt, der geändert werden kann. Wenn ein bestimmtes Blatt-Typ-Menü von der Menüsteuerung ausgewählt wird, die einen Impuls an seinem "Invoke"-Eingang empfängt, gibt im Menübaum links der Knoten des Bildschirms, den der Benutzer gerade betrachtet, selbst einen Impuls aus ausgeben und auch eine Parameteränderung aussenden. Es gibt auch zwei String-Eingänge, die verwendet werden können, um beim Einschalten des Arduino einen Begrüßungsbildschirm auf dem Display zu generieren.

Auf diesen Knoten folgt ein standardmäßiges 16x2-LCD-Controller-Modul aus der XOD-Umgebungsstandardbibliothek, aber jeder Anzeigetyp, für den ein Modul verfügbar ist, kann verwendet werden, um den Ausgabetext hier anzuzeigen.

  • Der Abschnitt Menüstruktur

Oben auf dem Screenshot der Skizze befindet sich eine baumartige Struktur, die beim Kompilieren und der endgültigen Ausgabe "Wurzel" des Baums an die Eingabe des Menü-Controllers geleitet wird, die sie akzeptiert, automatisch ein navigierbares Menü generiert, genau wie in der Abbildung dargestellt grafischer Designer. Derzeit implementiert sind drei Arten von Menübaumknoten, ein Menü vom Typ "Blatt" - ein letztes Untermenü ohne orangefarbene Eingabeports - dies stellt eine Aktion oder einen Parameter dar, die der Benutzer steuern kann, ein Menü vom Typ "Verzweigung" mit sowohl eine Eingabe als auch eine Ausgabe, bei der der Benutzer zwischen mehreren untergeordneten Untermenüs auswählen kann, und ein Menü vom Typ "Verknüpfung", bei dem Untermenüs gruppiert und in die Eingabe eines Menüs vom Verzweigungstyp eingespeist werden, um eine Gruppe von Optionen. Aus dem Diagramm sollte es hoffentlich einigermaßen selbsterklärend sein, wie man diese Gruppe von Knoten verdrahtet.

Die Auswahl von "invoke", wenn ein Menü vom "Zweig"-Typ angezeigt wird, führt zu seiner zugeordneten Untermenügruppe, anstatt eine Ausgabe zu erzeugen, wie es ein Menü vom Blatttyp tut. Unter-Untermenüs, Unter-Unter-Untermenüs usw. sind möglich! Komplexe Strukturen können implementiert werden, die hauptsächlich durch die verfügbaren RAM- und Flash-Speicherressourcen des Prozessors eines bestimmten Arduino-Modells begrenzt sind.

  • Ausgabe Abschnitt

In diesem Beispiel befindet sich der Ausgabeabschnitt dort, wo die Blattmenüs über die Ausgangspins des Arduino mit externer Hardware verbunden sind. Jedes Blatt-Typ-Menü hat einen Impuls-Typ-Ausgang, der über einen Bus mit einem entsprechenden Flip-Flop verbunden ist, um seinen zugeordneten digitalen Ausgangs-Pin ein- und auszuschalten. Diese Art von Anordnung könnte verwendet werden, um externe Relais oder LEDs zu steuern, aber Impulsausgänge sind sehr allgemein, und der Ausgangsimpuls, der beim Auswählen von "Aufrufen" beim Zugriff auf den Bildschirm eines Blattmenüs erzeugt wird, kann für viele Aufgaben verwendet werden, wie z Aktualisieren eines internen XOD-Puffertyp-Knotens, in dem Parameterdaten vom Parametertyp-Eingangsport des Menü-Controllers für die zukünftige Verwendung aufbewahrt werden.

  • Aktuell bekannte Probleme

Dieser Satz von Knoten wurde getestet und sollte mit dem Arduino Uno so funktionieren, wie er ist, aber es bleiben einige Probleme, die bis zum Stichtag dieses Projekts nicht behoben wurden. Derzeit muss irgendwo im Baum ein Menü vom Typ Zweig vorhanden sein, damit eine Skizze kompiliert werden kann, obwohl die meisten Projekte wahrscheinlich mindestens eine haben möchten. Die "obere" Menüeingabe des Menü-Controllers, die bis zum Titelbildschirm der Benutzeroberfläche zurückkehren soll, ist derzeit nicht implementiert, sollte aber für die nächste Überarbeitung ein einfaches Feature sein.

Vierzeilige Anzeigen werden vom Menü-Controller-Knoten unterstützt, aber die Menüschnittstelle vom Blatttyp mit vier Zeilen Texteingabe wurde noch nicht geschrieben. Es wurde viel Aufwand betrieben, um den Speicher-Overhead dieses Dienstprogramms zu reduzieren, aber die Art und Weise, wie der XOD-Transpiler derzeit konstante Strings speichert, ist nicht optimal für einen sehr geringen RAM-Overhead, und menübasierte Schnittstellen enthalten in der Regel viel Text. Für dieses Projekt wurde eine Problemumgehung entwickelt und eine Reihe von Knoten vom Typ Flash-String im Patch hinzugefügt, um sicherzustellen, dass längere Strings keinen wertvollen Programm-RAM verbrauchen. Hoffentlich wird dies in einem Update der XOD-Umgebung behoben, aber der Workaround funktioniert vorerst in Ordnung.

Die Verwendung von Nodes vom Typ Flash-String ist nicht allzu mühsam, erfordert jedoch das Duplizieren des Patches und des Codes für jeden neuen String, der im Programmspeicher gespeichert ist, und das Klicken in den C++-Code, der im Node selbst enthalten ist, um den Ausgabestring zu bearbeiten:

Die "ID"-Eingabe von Blatt- und Zweigknoten hat noch keine Funktion. Der Gedanke ist, dass es für jeden Satz von Untermenüs gut wäre, zugeordnete ID-Nummern zu haben, die so angeordnet sind, dass der Benutzer seine Position in einer Reihe von Anzeigen verfolgen kann, aber es erfordert einige weitere Überlegungen, wie man dies in C++ codiert automatisch geschehen.

  • Weiterführende Arbeit

Weitere Fehlertests und Tests auf anderen Arduino-Geräten neben AVR/ATmega-Geräten wie ARM sollten durchgeführt werden. Der aktuelle Satz von Menü-Knoten-Typen ist etwas einschränkend, es sollte mehr Vielfalt an Ein- und Ausgängen geben. Fortsetzung der Arbeit an der Reduzierung des RAM-Overheads, möglicherweise durch mehr Metaprogrammierung zur Kompilierzeit und das Speichern von möglichst vielen Daten im Flash-Speicher, anstatt die Baumkomponenten zur Laufzeit miteinander zu verbinden/zu verketten.

19.02.19 - Ein zweites Beispiel.

Dieser zweite Beispiel-Skizzen-Screenshot zeigt, wie Sie den Menü-Controller verwenden, um einen externen oder internen Wert als Eingabe für den Controller zu verwenden, die aktuellen und vorherigen Werte auf einer gewünschten Menüseite anzuzeigen, einen neuen Wert auszuwählen und in einem Puffer zu speichern.

Auf der rechten Seite wird der Menü-Controller-Knoten mit dem Ausgang eines Zählers gespeist, der von einem "Clock"-Knoten gespeist wird. Dies kann jedoch ein beliebiger interner Datenwert oder ein externer Wert von beispielsweise einem Potentiometer sein, das an einen analogen Eingang angeschlossen ist. Die Ausgabe des Zählers wird auch an einen String-Formatierungsknoten gesendet und mit etwas Anzeigetext verkettet, um den aktuellen Wert anzuzeigen, den der Controller in der zweiten Zeile des LCD empfängt, wenn diese Menüseite aufgerufen wird.

Die Ausgaben "invoked" und "param" des Blattmenüs "A" werden an einen "Puffer"-Knoten aus der XOD-Standardbibliothek gesendet. Die Ausgabe des Puffers wird dann zu einer ähnlichen Anordnung wie zuvor zurückgeleitet, mit Ausnahme des "Aufschub"-Knotens, der erforderlich ist, um alle Rückkopplungsschleifen in XOD-Skizzen zu unterbrechen. Der im Puffer gespeicherte Wert wird in der ersten Zeile des LCD angezeigt.

Wenn der Menü-Controller-Knoten einen "Invoke"-Triggerimpuls vom Keypad-Controller empfängt, gibt der A-out-Knoten den Parametereingabewert vom Menü-Controller dort drüben aus, in diesem Fall den Zählerstromwert, und einen "invoked"-Trigger Impuls, der die Aktualisierungsroutine des Puffers aktiviert und den neuen Parameter im Puffer speichert. Die Anzeige aktualisiert sich dann automatisch, um den neuen gespeicherten Wert wiederzugeben.

Der Ausgabeport des Puffers kann dann auch an eine beliebige Anzahl anderer Knoten geroutet werden, um ihr Verhalten zu ändern, um den neuen Datenwert widerzuspiegeln, den der Benutzer ausgewählt hat:

Code

  • XOD-Menüsystembibliothek
XOD-MenüsystembibliothekC/C++
https://xod.io/libs/bitrex/xod-menu-system-11

Fügen Sie bitrex/xod-menu-system über die Option Datei -> Bibliotheken hinzufügen... aus der XOD-Umgebung zum Browser für Skizzenbibliotheken hinzu.
Keine Vorschau (nur Download).

Schaltpläne

Direkt mit der XOD IDE öffnen xodmenusystemrev1_1_4-1-19_fLVYrcSgbX.xodball

Herstellungsprozess

  1. DTMF-Decoder, der nur Arduino verwendet
  2. Erstellen von Monitor-Ambilight mit Arduino
  3. ULTRASCHALLLEVITATION-Maschine mit ARDUINO
  4. LCD-Animation und -Spiele
  5. DIY-Voltmeter mit Arduino und Smartphone
  6. Herzfrequenzmesser mit IoT
  7. WebServerBlink mit Arduino Uno WiFi
  8. Autozähler mit Arduino + Processing + PHP
  9. Automatisiertes Dino-Spiel mit Arduino
  10. FM-Radio mit Arduino und RDA8057M