LCD4884 Arduino Laufschrift?
Habe mir letztens ein neues LCD4884 Display zugelegt. Nun steh ich aber vor folgenden "Denkfehler", und zwar wird in dem Beispiel bei Einfache Laufschrift auf LCD4884 bei http://www.arduinospielwiese.de/ das so beschrieben (kleiner Ausschnitt) :
void loop() { lcd.LCD_write_string( 78, 3, "M", MENU_NORMAL); delay(200); lcd.LCD_write_string( 70, 3, "MA", MENU_NORMAL); delay(200); lcd.LCD_write_string( 65, 3, "MAR", MENU_NORMAL ); delay(200); lcd.LCD_write_string( 60, 3, "MART", MENU_NORMAL ); delay(200); lcd.LCD_write_string( 53, 3, "MARTI", MENU_NORMAL ); delay(200); lcd.LCD_write_string( 48, 3, "MARTIN", MENU_NORMAL ); delay(200); lcd.LCD_write_string( 42, 3, "MARTIN ", MENU_NORMAL ); delay(200);
lcd.LCD_write_string( 35, 3, "MARTIN K", MENU_NORMAL ); delay(200); lcd.LCD_write_string( 30, 3, "MARTIN KU", MENU_NORMAL ); delay(200); lcd.LCD_write_string( 23, 3, "MARTIN KUP", MENU_NORMAL ); delay(200); lcd.LCD_write_string( 18, 3, "MARTIN KUPK", MENU_NORMAL ); delay(200); lcd.LCD_write_string( 12, 3, "MARTIN KUPKA", MENU_NORMAL ); delay(200); lcd.LCD_write_string( 12, 3, " ", MENU_NORMAL ); lcd.LCD_write_string( 8, 3, "MARTIN KUPKA", MENU_NORMAL ); delay(200); lcd.LCD_write_string( 8, 3, " ", MENU_NORMAL ); lcd.LCD_write_string( 3, 3, "MARTIN KUPKA", MENU_NORMAL ); delay(200); lcd.LCD_write_string( 3, 3, " ", MENU_NORMAL ); lcd.LCD_write_string( 0, 3, "MARTIN KUPKA", MENU_NORMAL ); delay(200); lcd.LCD_write_string( 0, 3, " ", MENU_NORMAL ); lcd.LCD_write_string( 0, 3, "ARTIN KUPKA", MENU_NORMAL ); delay(200); lcd.LCD_write_string( 0, 3, " ", MENU_NORMAL ); lcd.LCD_write_string( 0, 3, "RTIN KUPKA", MENU_NORMAL ); delay(200); lcd.LCD_write_string( 0, 3, " ", MENU_NORMAL ); lcd.LCD_write_string( 0, 3, "TIN KUPKA", MENU_NORMAL ); delay(200);
etc..
Ich jedoch habe das mit einer for-Schleife gelöst(bei mir dient Hallo als Laufschrift): "Es stehen Spalte 0...83 und Zeile 0...5 zur Textpositionierung zur Verfügung."
void loop() {
for(i = 0 ;i < 54; i++) { lcd.LCD_write_string(i, 1, "HALLO", MENU_NORMAL ); delay(100); lcd.LCD_write_string(i, 1, " ", MENU_NORMAL );
}
for(i = 54 ;i > 0; i--) { lcd.LCD_write_string(i, 1, "HALLO", MENU_NORMAL ); delay(100); lcd.LCD_write_string(i, 1, " ", MENU_NORMAL );
}
}
Alles hat wunderbar geklappt, aber ich verstehe es nicht warum es 54 hier i = 0 ;i < 54; i++ heißen muss.
PS: Habe es durch Probieren geschafft auf diese Nummer zu kommen
Freue mich auf Antworten!
1 Antwort
Was passiert denn, wenn du da eine andere Zahl einsetzt? Ich hätte erwartet, dass 78 richtig sein müsste (83 - 5), damit die Schrift bis an den Rand geht, aber ich kenne das Display nicht.
Die Anleitung auf der Spielwiese finde ich nicht besonders gut, da wird ja eigentlich fast nichts erklärt, und die Programmierung sieht auch irgendwie unelegant aus, das müsste vermutlich schöner zu machen sein.
Naja erstmal geht die Schrift bis zum rechten Rand und "stoßt" dann ab und wandert weiter zum linken
So war mein Ansatz auch, aber ich bin dann doch irgendwie gescheitert, da die Pixelbreite nicht hinkommt :/
PS: Ich habe eine Idee, wie es zu der 54 kommt: Auf der "Spielwiese" steht, das Display hätte 84 Spalten und 6 Zeilen - vermutlich ist das etwas falsch beschrieben. Das Display hat eine Auflösung von 84 Pixel (Breite) und 48 Pixel (Höhe), bzw. kann als Schrift maximal 6 Zeilen darstellen, wobei die Anzahl der Zeichen pro Zeile womöglich davon abhängen, wie breit die jeweiligen Buchstaben sind.
Man gibt also nicht wirklich Spalte und Zeile ein, sondern die Entfernung vom linken Bildrand in der Einheit Pixel und als zweiten Wert die Zeile. Das Wort "HALLO" wird vermutlich ungefähr 29 Pixel breit sein, so dass es nur funktioniert, wenn du es maximal an Position 83-30 = 54 anzeigen lassen kannst.
Das sind natürlich auch nur Vermutungen, aber ich halte es für möglich, dass es so ist.