Projekt: LCDMenuLib / LCDMenuLib2 ( LCDML ) - Menü mit mehreren Ebenen

Jomelo:
Ich habe die Lib nur unter Windows getestet.

Na da habe ich mit meiner Vermutung ja gar nicht so falsch gelegen :wink:

Ich versuche mich grad an deinem Beispiel. Leider bekomme ich das nicht hin. Ich habe meine Displays beide per I²C angeschlossen. In meinem (funktionsfähigen) Sketch (zum Projekt: siehe Signatur) steht dazu folgendes:

// I²C Display

#define BACKLIGHT_PIN  7
#define En_pin  4
#define Rw_pin  5
#define Rs_pin  6
#define D4_pin  0
#define D5_pin  1
#define D6_pin  2
#define D7_pin  3
#define  LED_OFF  0
#define  LED_ON  1

#include <LCD.h>
#include <LiquidCrystal_I2C.h> 

//Pins zuordnen
LiquidCrystal_I2C  lcd0(0x20,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);
LiquidCrystal_I2C  lcd1(0x27,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

void setup() {

 lcd0.begin (20,4);                                  // LCD0 Größe angeben
 lcd0.setBacklightPin(BACKLIGHT_PIN,NEGATIVE);
 lcd0.setBacklight(LED_ON);
 
 lcd1.begin (20,4);                                  // LCD1 Größe angeben
 lcd1.setBacklightPin(BACKLIGHT_PIN,NEGATIVE);
 lcd1.setBacklight(LED_ON);
.
.
.
}

void loop() {
  lcd0.home();
  lcd0.backlight();  //Backlight ON if under program control
  lcd1.home();
  lcd1.backlight();  //Backlight ON if under program control

Ich hoffe ich habe beim kopieren jetzt alles erwischt, was zu den Displays gehört. Nun habe ich versucht, das in dein Beispiel zu kopieren und die entsprechenden Teile in deinem Beispiel zu ersetzen. Nur leider war das bisher erfolglos. Das liegt sicherlich an meinen nicht vorhandenen Programmierkenntnissen :frowning:

Könntest du mir zeigen, wie ich das richtig machen muss?

Frank

Hi,
im Moment ist die Lib nur für die normale Verwendung geeignet, also noch nicht für I2C.

Ich könnte am Sonntag gegen Abend die Lib auf die LiquidCrystal_I2C Lib umschreiben / anpassen, so dass beide Versionen möglich sind.
Da ich hier kein I2C Display habe müsste jemand von euch die Lib dann testen. Wenn du damit einverstanden bist, das dein LCD Menü am Wochenende noch nicht laufen wird, können wir das gerne machen.

Gruß
Nils

Guten Morgen!

Das ist überhaupt kein Problem. Das Projekt wird sich noch über Monate hinziehen, da kommt es auf ein paar Tage nicht an. Die notwendigen Tests mache ich gerne. Ist ja nicht ganz uneigennützig :wink: Du kannst mir die Sachen per PN oder E-Mail schicken.

Frank

Wer Lust hat, kann die I2C Version testen.
Vorraussetzung ist die LiquidCrystal_I2C Lib.

Da ich selber kein I2C Display besitze, bitte ich euch um einen Status Bericht.

LCDMenuLib_I2C.rar (13.7 KB)

ich habe mal dein Demo Projekt mit meinem I2C testeb wollen, aber:

sketch_aug06a:121: error: invalid conversion from 'int' to 't_backlighPol'
sketch_aug06a:121: error: initializing argument 3 of 'LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t, uint8_t, t_backlighPol)'

eine Idee?

Hi zikke,
kannst du mir ein paar mehr Informationen geben:

  • Welche Arduino Version ?
  • Welche LiquidCrystal_I2C Version ?
  • Wie sieht der Code aus der diesen Fehler verursacht ?
  • Hast du Versucht das Beispiel zu kompilieren ?

Der Fehler könnte darauf hinweisen das t_backlightPol falsch definiert ist. Wo kommt das her ?

LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t, uint8_t, t_backlighPol)

Laut dem Header von LiquidCrystal_I2C darf nichts das mit dem Backlight zu tun hat übergeben werden:

LiquidCrystal_I2C(uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows);

Hallo,

meine Fehlermeldung sah genau so aus. Ich nutze die 1.0.5 mit deinem Beispiel. Der Fehler erscheint beim Kompilieren.

Anbei die von mir verwendete Lib.

Frank

DASI funktionierende LCDMenuLib_I2C.zip (14.4 KB)

Arduino ist die neueste und das ganze kommt beim compile deines Beispiels. Ich häng die Lib mal dran.

LCDMenuLib_I2C.7z (10.1 KB)

Hä ?
Wer ist nun wer hier und von wem kommt welche Datei ?
Die beiden Dateien beinhalten den gleichen Inhalt und haben nichts mit der LiquidCrystal_I2C Lib zu tun !?!

Wenn ihr mir eine PN schickt, dann schreibt nicht den gleichen Inhalt nochmal in diesen Thread, das bringt nur Verwirrung. (Bezogen auf die letzten zwei Einträge)

Ich kann nur mit der offizellen Lib arbeiten, ein Support/Hilfestellung für andere Libs, bei denen nicht einmal die Quelle genannt werden kann, kann ich nicht umsetzten.

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

Du siehst es genau richtig, ohne weiteres gehts nicht und macht auch kein sinn 2 Menüs zu haben.

Offensichtlich hätte man gleich mit der LCDMenuLib als Basis anfangen müssen.

Es lohnt sich aber umzubauen

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 :wink:

Beste Grüße,
Jan

Man kann sich ein Menü namens INFO machen. Da hat man dann alles was angezeigt werden soll.

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

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

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.

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

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.

Jou, schieberegister hört sich 1A an!

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" ?

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 :wink: