Menü mit 20x4 LCD funktioniert nicht richtig

Hi,
hab ein 20x4 LCD das funktioniert auch, bis auf das man mit einem Menü probiert, da werden zur die ersten 2 Zeilen von 4 angezeigt!
Die anderen Zeilen kommen zum Vorschein wenn man mit den Tasten herunterklickt.
Es macht eher den Anschein als würde noch irgendwo hinterlegt sein das man ein 16x2 angeklemmt hat.

Wenn man simplen Text usw benutzt kann man alles in jeder Zeile lesen.

Folgende Demo habe ich gefunden, diese funktioniert auch bis auf das beschriebene Problem:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 20, 4);

int upButton = 10;
int downButton = 11;
int selectButton = 12;
int menu = 1;

void setup() {
  lcd.begin(20, 4);
  lcd.init();
  lcd.backlight();
  pinMode(upButton, INPUT_PULLUP);
  pinMode(downButton, INPUT_PULLUP);
  pinMode(selectButton, INPUT_PULLUP);
  updateMenu();
}

void loop() {
  if (!digitalRead(downButton)){
    menu++;
    updateMenu();
    delay(100);
    while (!digitalRead(downButton));
  }
  if (!digitalRead(upButton)){
    menu--;
    updateMenu();
    delay(100);
    while(!digitalRead(upButton));
  }
  if (!digitalRead(selectButton)){
    executeAction();
    updateMenu();
    delay(100);
    while (!digitalRead(selectButton));
  }
}

void updateMenu() {
  switch (menu) {
    case 0:
      menu = 1;
      break;
    case 1:
      lcd.clear();
      lcd.print(">Men\xF5Item1");
      lcd.setCursor(0,1);
      lcd.print(" Men\xF5Item2");
      break;
      
    case 2:
      lcd.clear();
      lcd.print(" Men\xF5Item1");
      lcd.setCursor(0,1);
      lcd.print(">Men\xF5Item2");
      break;
      
    case 3:
      lcd.clear();
      lcd.print(">Men\xF5Item3");
      lcd.setCursor(0,1);
      lcd.print(" Men\xF5Item4");
      break;
      
    case 4:
      lcd.clear();
      lcd.print(" Men\xF5Item3");
      lcd.setCursor(0,1);
      lcd.print(">Men\xF5Item4");
      break;
      
    case 5:
      menu = 4;
      break;
  }
}

void executeAction() {
  switch (menu) {
    case 1:
      action1();
      break;
    case 2:
      action2();
      break;
    case 3:
      action3();
      break;
    case 4:
      action4();
      break;
  }
}

void action1() {
  lcd.clear();
  lcd.print(">Executing #1");
  delay(1500);
}
void action2() {
  lcd.clear();
  lcd.print(">Executing #2");
  delay(1500);
}
void action3() {
  lcd.clear();
  lcd.print(">Executing #3");
  delay(1500);
}
void action4() {
  lcd.clear();
  lcd.print(">Executing #4");
  delay(1500);
}

Freue mich auf eure Hilfe und Antworten!

Dein Code gibt nur was auf die ersten zwei Zeilen aus, was ist also das Problem?

Ja da fehlen 2 Zeilen auf dem Display. Das Display hat ja 4 Zeilen und das Menü hat auch 4 Zeilen, warum werden nur 2 angezeigt? Ich seh das Problem ehrlich gesagt nicht warum das so ist.

Nimm doch mal zum Test
lcd.setCursor(0, 2);

Hallo
lcd.setCursor(0,1);
setzt den Cursor auf das erste Zeichen in der zweiten Zeile . Wenn Du die 3. u 4. Zeile beschreiben willst musst Du irgendwo
lcd.setCursor(0,2);

und
lcd.setCursor(0,3);
verwenden
Heinz

Achso, das hatte ich vergessen zu erwähnen, das funktioniert nicht. Deswegen bin ich echt etwas ins Grübeln gekommen.
Wenn ich das so mache, dann sieht man wieder die ersten 2 Zeilen. Beim runterklicken springt
die 2. Zeile weiter nach unten diese verschwindet und es tauchen einzeln 3 und 4 auf. :joy:

Was funktioniert nicht ?
Geht es bitte etwas genauer ?

Im constructor die 20 4 angeben und im Begin und ein init ... da scheint mir einiges nicht zusammen zu passen. Welche lib genau verwendest du? Wie schaut das Hello World dazu aus?

Wenn du es wie machst ?
Warum schreibst du es nicht genauer ?
Oder sollen wir den Rest erraten ?

So wie von euch vorgeschlagen, da gibts dann so ein durcheinander.

Hallo

loop();
      lcd.clear();
      lcd.print("Zeile 1");
      lcd.setCursor(0,1);
      lcd.print("Zeile 2");
      lcd.setCursor(0,2);
      lcd.print("Zeile 3");
      lcd.setCursor(0,3);
      lcd.print("Zeile 4");

   delay(1000);
}

Mach mal einen Sketch mit dem loop nur um mal zu sehen ob das richtig geht.
Heinz

So....durcheinander?
Dass liegt dann wohl an deinem Sketch, der leider sehr unübersichtlich ist, da kein Kommentar vorhanden ist.

Ja, das ist doppelt im Prinzip, wenn ich [code]
lcd.begin(20, 4);

[/code] rausnehme ändert das leider auch nichts.

geht das:

//YWROBOT
//Compatible with the Arduino IDE 1.0
//Library version:1.1
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x27 for a 16 chars and 2 line display

void setup()
{
  lcd.init();                      // initialize the lcd
  // Print a message to the LCD.
  lcd.backlight();
  lcd.setCursor(3, 0);
  lcd.print("Hello, world!");
  lcd.setCursor(2, 1);
  lcd.print("Ywrobot Arduino!");
  lcd.setCursor(0, 2);
  lcd.print("Arduino LCM IIC 2004");
  lcd.setCursor(2, 3);
  lcd.print("Power By Ec-yuan!");
}


void loop()
{
}

?

Das geht, wie bereits erwähnt tadellos.

wir fassen zusammen:
Das Beispiel funktioniert mit Zeile 0 bis 3

Dein Code enthält keinen Sprung auf Zeile 2 oder Zeile 3 - und er springt auch dort nicht hin.

Stelle deinen Code richtig (soll heißen lösch das begin(20,4) raus - und lade deinen Sketch neu hoch.
Dann zeigst uns noch ein Bild worin du markierst, was dir nicht gefällt.

Hallo,

na ja Dein Sketch ist für ein disp mit 2 Zeilen . in dem swich case werden ja immer nur 2 zeilen angezeigt. MenüItem1 / MenüItem2
oder halt
MenüItem3 / MenüItem4

Gedacht war das sicher mal so
Seite 1 MenüItem1 / MenüItem2
Seite 2 MenüItem2 / MenüItem3
Seite 3 MenüItem3 / MenüItem4
Seite 4 MenüItem4 / MenüItem5

Dann rollt das immer eine Zeile rauf/runter

Wenn Du max 4 Einträge hast, wozu dann ein Seitenwechsel ?

Genau das hatte ich auch schon probiert, nur ändert das nichts.
Das Problem ist obwohl ich n 20x4 und n vierzeiliges Menü hab, werden nur 2 Zeilen Menü dargestellt.

DU HAST KEIN VIERZEILIGES MENÜ

dein LCD hat vieleicht 4 Zeilen.

ABER DEIN MENÜ NICHT

Achso ist das! :sweat_smile: Frag mich gerade wie es vom Code her dann aussieht, da hab ich gerade keine Idee.