Go Down

Topic: Projekt: LCDMenuLib / LCDMenuLib2 ( LCDML ) - Menü mit mehreren Ebenen  (Read 341872 times) previous topic - next topic

jabami

Hallo zusammen,

ich habe gerade die LCDMenuLib ausprobiert. Das Beispiel funktioniert auch hervorragend, aber wie baue ich das Menu in ein eigenes viel größeres Projekt ein. Ich nutze in meinem Code bereits die LiquidCrystal Library extensiv. Leider bindet das Menu diese erneut ein und ich kann die LCDMenuLib so nicht verwenden.
Ist es zudem überhaupt möglich auf bereits vordefinierte Button-Objekte zuzugreifen? Das scheint ja alles schon sehr ineinander verwoben zu sein. Offensichtlich hätte man gleich mit der LCDMenuLib als Basis anfangen müssen. Sie später einfach als zusätzliche Menüfunktion für Konfigurationen zu implementieren scheint nicht mehr möglich... oder verstehe ich da was falsch.

Beste Grüße,
Jan

skorpi080

Du siehst es genau richtig, ohne weiteres gehts nicht und macht auch kein sinn 2 Menüs zu haben.
Quote
Offensichtlich hätte man gleich mit der LCDMenuLib als Basis anfangen müssen.

Es lohnt sich aber umzubauen
playground.arduino.cc/PmWiki/433Mhz-Funkmodule

jabami

Hallo skorpi08,

Hmmm... hätte ich mal eher drauf stoßen müssen, da ich aber meinen bisherigen Code relativ modular gehalten habe sollte die Migration vielleicht doch kein allzu-großes Problem sein. Aber wie stelle ich es denn an, das mir das Menü erst nach einem Tastendruck angezeigt wird? Das Beispiel schmeißt einen ja direkt ins Menu sobald man das Board eingeschaltet hat. Ich bräuchte sowas wie einen 00-Menu Layer der immer angezeigt wird und erst nach dem drücken einer Taste soll das Menü aufgehen.
Mit bestem Dank im Vorraus. Ich fange dann jetzt mal das umbauen meines Codes an ;)


Beste Grüße,
Jan

skorpi080

Man kann sich ein Menü namens INFO machen. Da hat man dann alles was angezeigt werden soll.
playground.arduino.cc/PmWiki/433Mhz-Funkmodule

jabami

Hallo zusammen,


wenn ich am Ende meiner Setup Routine folgenden Befehl schreibe:

LCDML.goMenu(Item_1);

würde ich erwarten das ich (vom Beispielprogram der LCDMenuLib ausgehend) im ersten Menüpunkt lande, d.h. die  "FUNC_information(void)" ausgeführt wird. Das passiert aber nicht. Statt dessen wird mir die Menüstruktur angezeigt.
Wie nutze ich den o.g. Befehl korrekt um direkt zu einem Menü (bzw. Unterpunkt) zu springen?

Beste Grüße,
Jan


Jomelo

Hi,
ich habe die Diskussion hier aus dem Urlaub fleißig verfolgt, konnte von dort aber nicht antworten  :0

Du kannst im Menü wandern mit 
Code: [Select]

LCDML.Button_enter();   // eine Ebene tiefer
LCDML.Button_up();       //eine Ebene nach oben
LCDML.Button_down();   // Scrollen nach unten
LCDML.Button_left();     // Scrollen nach unten
LCDML.Button_right();
LCDML.Button_quit();


Um den ersten Button zu betätigen einfach LCDML.Button_enter();  ausführen und das Menü landet in der ersten Funktion.
while(!success){try++;}

skorpi080

Ich denke es war so gemeint....

Im Setup steht LCDML.goMenu(INFO MENÜ); und ich erwarte dass der auch zum INFO MENÜ geht wenn der Arduino Strom bekommt
Wenn keine Tasten innerhalb von 5 sec gedrückt werden, soll der LCDML.goMenu(INFO MENÜ); ausführen.

Hatte mich damit noch nicht beschäftigt aber interessieren würde es
playground.arduino.cc/PmWiki/433Mhz-Funkmodule

Jomelo

goMenu ist eher eine Interne Funktion die immer ausgeführt wird wenn  "Button Enter" betätigt wird. Ich bastel im Moment an der Lib rum, sodass diese auch mit I2C und mit der Ansteuerung über schiebe Register kompatible wird. Ich könnte auch eine Funktion einbinden mit der man direkt in einen Menu Punkt springen kann. Im Moment würde ich aber die Methode der Steuerung über die Button Funktionen wählen. Diese Funktionen können auch direkt hintereinander aufgerufen werden, so dass ein Sprung in einen anderen Punkt erfolgt.
while(!success){try++;}

skorpi080

playground.arduino.cc/PmWiki/433Mhz-Funkmodule

Jomelo

Die aktuellste Version der LiquidCrystal Lib unterstützt Schieberegister bereits. Link: https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads

Ich wollte die Lib so umschreiben, das diese mit all den neuen Schnittstellen kompatible ist.

An den Bezeichnungen der bisherigen Funktionen ändert sich nichts, sodass eine Abwärtskompatibilität gegeben ist. Gibt es noch wünsche für neue Funktionen
z.B: "Jump to Funktion xxx" ?
while(!success){try++;}

skorpi080

SimpleThread, Schieberegister, Jump to Funktion (nach 5 sec INFO anzeigen falls keine Taste gedrückt)

Sonst wüsste ich nichts, was mit einem Menü zu tun hat.
Wenn ne Zeitschaltuhr und OneWire (DS18B20) mit onboard wäre, hätt ich nix dagegen  ;)
playground.arduino.cc/PmWiki/433Mhz-Funkmodule

jabami

Halo zusammen,

hmmm... witziger weise kann ich mit der Funktion

LCDML.goMenu(Item_4);

direkt in den Programmpunkt springen, d.h. da funktioniert diese Funktion exakt wie ich mir das vorgestellt habe, auch wenn sie nicht dafür gedacht war. Wenn eine zukünftige Version der Library das direkte hineinspringen in einen Memüpunkt unterstüzen würde fänd ich das Super.

Ich frage mich allerdings gerade ob ich die Bibliothek nicht vielleicht immernoch falsch verwende.
Folgendes will ich erreichen.

Zunächst wird das Arduino gestartet, eine Setuproutine wird ausgeführt während bereits Plausibilitätsprüfungen für angeschlossene Sensoren laufen. Während Dieser Zeit wird dem Nutzer bereits eine Anzeige auf dem Display präsentiert (Wartebalken) damit er weiß das im Hintergrund bereits gearbeitet wird.
Das LCD -Display soll nach dem abarbeiten des Setup permanent Messwerte anzeigen.
Drückt der User eine Taste (Enter bzw. Select) wird das Menü geöffnet und man kann Einstellungen an Umrechnungsfaktoren, LCD-Kontrast- und Helligkeitseinstellungen vornehmen und der Gleichen. Längeres Drücken der Menütaste lässt wieder die Messwerte auf dem Display erscheinen und verlässt das Menü.

Nun habe ich meine Messwertanzeige in eine Level 0 Menüfunktion integriert, und kann diese auch anzeigen lassen, nur direkt dothin springen kann ich nicht (nachdem die Setup-Routine fertig ist). Die Steuerung über die Buttons finde ich sehr umständlich, obwohl das wahrscheinlich funktioniert.

Wie baut ihr denn eure UI`s mit der LCDMenuLib auf? Zeigt ihr permanent das Menü an, und der User muss dann in den jeweiligen Unterpunkt wechseln? Auch wenn dieser Unterpunkt die Hauptfunktion des Gerätes beinhaltet (also z.B. anzeigen einer Uhrzeit oder eben Messwerte)?


Beste Grüße,
Jan

jabami

Ich nochmal,

mir ist gerade noch etwas anderes aufgefallen. Ich habe unabhängig von der LCDMenuLib einen "Custom Character" erstellt. Dummerweise wird dieser jetzt immer über dem, bzw. als unterer Teil des Scrollbalkens angezeigt. ich muss daher gerade davon ausgehen das die Anzahl zusätzlich definierbarer Charaktere erschöpft ist. Kann ich das irgendwie umgehen, oder muss ich einfach damit leben und ggf. den Scrollbalken im Menü abschallten?

Gruß,
Jan

Jomelo

Hi, in der LCDMenuLib befindet sich ein Config File (LCDMenuLib_config.h). Mit dem kannst du den Scrollbalken auf eine kleinere Version die nur zwei neue Zeichen verwendet minimieren, oder ganz deaktivieren.

Versuch mal den Wert auf "2" zu ändern, ich denke das löst dein Problem.
while(!success){try++;}

jabami

Hallo Jomelo,

das behebt den Fehler leider nicht. Mein "Custom Charcter" erscheint jetzt nur an anderer Stelle im "Scrollbalken". Ausserdem ist der Scrollbalken bei meinem 16x2 Display auf Position 14. D.h. rechts neben dem "Pfeil nach unten" ist noch ein Zeichen frei. Dieses würde ich natürlich auch gerne nutzen. Wieviele "Custom Characters" implementiert denn die LCDMenuLib bisher? Wo kann ich die aufgelistet finden?

Vielen Dank und beste Grüße,
Jan

Go Up