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);
}
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.
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);
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.
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?
//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()
{
}
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.
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.