ich habe ein 20x4 LCD Display das am Arduino hängt. Folgender Code sollte den Text der seriell kommt auf dem Display darstellen 欢迎光临-GB .
Leider stimmt etwas werden die Zeilen vertauscht. Der maximal 80 Zeichen lange Text sollte in 4 Zeilen geteilt werden, aber auf dem Dsiplay erscheint Zeile1e 1,Zeile 3, Zeile 2, Zeile 4
Auch wenn ich im Code die Reihenfolge ändere auf
...
lcd.setCursor (0,0);
..
lcd.setCursor (2,0);
..
lcd.setCursor (1,0);
...
lcd.setCursor (3,0);
Wird der Text falsch dargestellt.
P.s.: wenn ich die if-Anweisungen weglasse und den empfangenen String in eine lcd.print Anweisung packe, wird der Text auch falsch dargestellt.
Habe kein 20x4 gerade mit Beschaltung aufgebaut, aber war es nicht so, dass setCursor richtig funktioniert?
lcd.setCursor(x,0); // Zeile 1
lcd.setCursor(x,1); // Zeile 2
lcd.setCursor(x,2); // Zeile 3
lcd.setCursor(x,3); // Zeile 4
Dein Problem ist, dass du die String Nachricht direkt in eins an das Display schickst. Hierbei ist der Fehler bekannt, dass er in Zeile 1, 3,2,4 nacheinander schreibt. Das ist aber überhaupt kein Problem.
Splitte deinen String! Wobei jeder Teil dann max. 20 Ziffern beinhaltet.
P.s.: wenn ich die if-Anweisungen weglasse und den empfangenen String in eine lcd.print Anweisung packe, wird der Text auch falsch dargestellt.
Falsch ist eine große, nichssagende beschreibung Deines Problems. Ich kann mir da nichts (oder sehr viel) vorstellen.
Bitte beschreibe das "falsch" besser.
Grüße Uwe
Wenn ich den Text als ganzes ins Display Schicke, zum Beispiel:
lcd.print("Wenn ich den Text als ganzes ins Display Schicke, zum Beispiel:");
kommt als Ausgabe so etwas:
Zeile 1: Wenn ich den Text al
Zeile 2: Schicke, zum Beispi
Zeile 3: s ganzes ins Display
Zeile 4: el
Wie bereits gesagt, das ist normal !
Dass die LCD library das 17. Zeichen einer Zeile nicht wegschneidet, hilft dir nichts. Es landet eben nicht da, wo du es gerne hättest.
Im "echten Leben" nutzt automatischer Zeilenumbruch nichts.
Musst schon mindestens für jede Zeile ein setCursor() aufrufen !
Das ist kein Fehler, die Zeilenanordnung ist so im Displaykontroller hinterlegt. Splitte die Daten ordentlich und gebe sie dann statisch mit lcd.setCursor() aus.
Kopieren dürfte wegen der Null-Terminierung nötig sein. Es sei denn vielleicht du schickt zwischen jedem Teil-String ein Zeichen mehr über Serial. Das kann man dann per Hand mit '\0' überschreiben. Dann kann man auch direkt das eingelesene Array von Serial Stück für Stück ausgeben.
Die Zeilennummern bei setCursor() sind glaube aufeinander folgend wie man es erwartet. Da stimmt was ich vorher gesagt habe nicht so ganz.
Das Problem ist wenn man einen längeren String mit einer print() Anweisung ausgibt. Dann macht ihn der Display Controller durcheinander. setCursor() passt das glaube ich korrekt an.