Suche Bibliothek für einfache Menüstruktur

Hallo,

als Newbie schlage ich mich gerade damit rum, eine einfache Menüstruktur incl. Eingabe-/Ausgabemöglichkeiten für Zahlen zu erstellen, die auf dem Arduino laufen sollen.
Ausgabe über 16x2 LCD Display, Eingabe über 4 Taster ("ESC", "Links"."Rechts", "OK").
Menüstruktur heißt, ca. 4-5 Menüpunkte auswählen zu können, und als Untermenü dort bei Bedarf Zahlen eingeben zu können.
Ich stelle jetzt fest, daß das gar nicht so trivial ist, und mein bisheriger Code schon erschreckend lang wird. Vor allem, weil ich den Ergeiz habe, daß während der Bedienung, z.B. Eingabe von Zahlen, nicht die Oberfläche exklusiv laufen soll, sondern potentiell der Hauptprozess im Hintergrund weiterlaufen können sollen.
Sorry, ich weiß nicht wie ich das besser ausdrücken soll.

Gibt es eine Bibliothek oder Beispielscode für einfache Menüauswahlstrukturen und auch für Zahleneingaben ?
realisiert man sowas eigentlich über Interruptstrukturen ? Derzeit werden meine Tasten halt alle zyklisch abgefragt, und je nach aktuellem Kontext unterschiedlich interpretiert. Das wird umfangreich, und unübersichtlich, und ich hab das Gefühl, das müsste auch einfacher gehen können.
Bin halt Anfänger.

Ziel ist letztendlich den Arduino unabhängig vom PC für Steuer- und Regelaufgaben nutzen zu können, und Parametereingaben sollen nicht die Regelung unterbrechen.

Danke für Tips,

Tütenflieger

Hier nochmal ein Beispiel wie ich mir ein Menü mit auswählbaren Submenüs vorstelle:

Anzeige1 Alarme Einstellungen Hilfe
Anzeigen P-Anteil über
Löschen I-Anteil
D-Anteil
Alarmlevel
Bei meinem 16x2 Display steht in der ersten Zeile jeweils ein Hauptmenüpunkt , und in der zweiten ein Submenüpunkt

Moins.... das sieht ein bisschen nach "kannste mal?" aus...

Definitiv nein...

Aber, wenn Dir jemand helfen soll, dann poste den Code.
(Das steht unter jedem "kannste mal?"-Posting.)

Nicht falsch versehen... es wir Dir jetzt wohl kaum jemand auf die Schnelle eine Menuelibrary basteln... aber man könnte Dir vielleicht hier und da ein bisschen helfen...

Lieber Gruß
ChrisS

Schau mal hier:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1240415211/4.

Ich würde niemals Menues mit Interrupts bauen. Tasten einlesen per ISR ist hingegen sehr sinnvoll.

Gruß, Udo

Nachtrag: sobald Dir der Speicher platzt, die Antwort auf die nächste Frage ist "Google nach PROGMEM".

Gruß, Udo

Hallo,

@ Udo, danke für den Link, ich hatte zu spät im englichsprachigem Forum nachgeschaut, und hol das jetzt detaillierter nach.

@ChrisS: Es war definitv kein "kannste mal" Post, mein eigenes Programm ist ja fast fertig, und funktioniert auch zu 90%.
Mir erscheint mein Ergebnis halt zu umfangreich (5k incl. LCD und Tastenbibliothek, aber noch ohne den eigentlichen Nutzcode) und unelegant, und es kamen ein paar grundlegende Fragen zur Programmiertechnik hoch, so daß ich als Anfänger wissen wollte, wie andere das machen. Ich dachte, Menüs sind ein Brot & Butter Problem, selbst bei AVRs.

Mit Interrupt und Menues meinte ich schon die Tasten via ISR, um das Thema kümmere ich mich dann demnächst.

Wie stelle ich eigentlich fest, daß das RAM nicht ausreicht ? Merkt der Compiler das schon vorher, wenn ich zuviele Variablen definiert habe, oder macht die Kiste im Betrieb einfach nur Unsinn, und ich such mich tot nach der Ursache ?

Tütenflieger

Wie gesagt... Progmem... und wie gesagt. poste Code....

Lieber Gruß
ChrisS

Der Compiler kann das niemals vorher wissen. Man kann ja auch dynamisch Ram belegen. Die Ergebnisse sind völlig undefiniert. Es kann sein, daß es einfach abstürtzt oder plötzlich merkwürdiges Verhalten zeigt.

Details siehe hier: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1270998685.

Gruß, Udo

Hallo,

als OP wollte ich hier noch meinen mittlerweile funktionierenden Code anbieten, wer will, kann ihn weiterverwursten.

Dieses Programmgerüst zeigt auf einem 16*2 LCD Display (Hitachi44790 kompatibel) eine zweidimensionale Menüstruktur.
Zur Dateneingabe dienen 4 Taster:
Home, Links, rechts, OK

Es können mit den Links / Rechts Tastern Punkte aus einem Hauptmenü ausgewählt werden. Es wird in der 1. Zeile immer nur ein Menüpunkt dargestellt.
Nach Drücken von OK wird in die jeweiligen Untermenüs gesprungen. Diese werden in der 2. Zeile dargestellt.
Mit Home geht es wieder zurück ins Hauptmenü
Innerhalb der Submenüs kann dann mit der OK Taste die jeweilige Aktion ausgewählt werden.
Die Menüabfrage ist so konzipiert, daß es prinzipiell keine Warteschleifen gibt.
Das bedeutet, daß nirgendwo innerhalb einer Schleife auf ein Tastendruck gewartet wird.
Die Tastendrücke werden nicht über Interrupts ausgewertet.

4 Taster nebeneinander mit den Funktionen:
Home / Escape
Links / Hoch
Rechts / Runter
OK / Eingabe
sind auf 4 als Eingang deklarierte digitale Pins gelegt.

Beispiel wie ein solches Menü aussehen kann:
Einstell Typ Anzeige Hilfe
Aktion 1 Test
Aktion 2
Aktion 3

Das Programm "Menue_Geruest_OK" ist incl. der benutzten Bibliotheken "LiquidCrystal" und "Debounce" ca. 3,5 kbyte groß.

http://www.flevonaut.de/Arduino/Menue_Geruest_OK/Menue_Geruest_OK.pde

Vergleichbares scheint es auch hier zu geben:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1242443739/0#5
Bei dieser pointerbasierten Struktur blickte ich aber nicht durch :wink:

Gruß,

Tütenflieger