Forum: Mikrocontroller und Digitale Elektronik Arduino Mini Pro Atmega328P 8x2 LCD HD47780 Ausgabe Problem


von Digit-22 N. (digit-22)


Lesenswert?

Hej Leute.
Ich versuche gerade eine LCD 8x2 mit dem HD47780 Controller anzusteuern.
Ich nutze einen Arduino mini Pro Atmega328P. Die Ausgabe funktioniert 
auch soweit. Ich hab nur das Problem das die Ausgabe über das ganze 
Display geht.

Z.B. möchte ich nur die ersten 4 Zeichen des Displays nutzen um max 
einei 4 stellige Zahl auszugeben. Aber irgendwie wird die 4 stellige 
Zahl mehrfach über das gesamte display ausgegeben.

Im folgenden Code lese ich A0 Analog aus und gebe den Wert aufm Display 
aus.
1
#include <LiquidCrystal.h>
2
3
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
4
5
void setup() {
6
  lcd.begin(8, 2);
7
}
8
9
void loop() {
10
  int sensorValue = analogRead(A0);
11
  lcd.display();
12
  lcd.print(sensorValue);
13
  delay(10);
14
}



Hat einer einen Rat oder sieht den Fehler?


LG
Shabi

von spess53 (Gast)


Lesenswert?

Hi

>Aber irgendwie wird die 4 stellige
>Zahl mehrfach über das gesamte display ausgegeben.

Dann mach dich mal schlau, wie der Cursor an einer bestimmten Stelle 
positioniert wird. Da gibt es bestimmt einen Befehl der vor deinem

>'lcd.print(sensorValue);

eingefügt werden kann.

MfG Spess

von Digit-22 N. (digit-22)


Lesenswert?

HEhe

Kurz und Knapp. Ich bedanke mich vielmals.

Hier die Lösung:

1
#include <LiquidCrystal.h>
2
3
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
4
5
void setup() {
6
  lcd.begin(8, 2);
7
}
8
9
void loop() {
10
  int sensorValue = analogRead(A0);
11
  lcd.display();
12
  lcd.setCursor(0, 0);
13
  lcd.print(sensorValue);
14
  delay(10);
15
}



LG
Shabi

von spess53 (Gast)


Lesenswert?

Hi

>Hier die Lösung:

Ich kenne die Arduinos nicht, aber du solltest sicher sein, dein

>lcd.print(sensorValue);

auch immer die gleiche Stringlänge ausgibt. Sonst hast du wieder 
Artefakte vorheriger Werte.

MfG Spess

von Jürgen S. (jurs)


Lesenswert?

Shabi N. schrieb:
> Im folgenden Code lese ich A0 Analog aus und gebe den Wert aufm Display
> aus.

Streiche die Zeile "lcd.display();" und ersetze sie beispielsweise durch 
"lcd.clear();". Die Ausgabe wird dann durch das Löschen bei Änderungen 
immer kurz flackern.

Wenn die Zahl immer dieselbe Stellenzahl hat, kannst Du auch einfach den 
Cursor immer auf Anfang positionieren mit:
http://arduino.cc/en/Reference/LiquidCrystalSetCursor

Aber wenn sich die Stellenzahl ändert und z.B. mal 4, 3, 2, oder 1 
Stelle hat, dann mußt Du die Zahl vor der Ausgabe entweder als Text 
immer auf die maximale Breite formatieren und ausgeben. Oder die 
fehlenden Stellen durch eine Ausgabe von Leerzeichen ersetzen.

von spess53 (Gast)


Lesenswert?

Hi

>Streiche die Zeile "lcd.display();" und ersetze sie beispielsweise durch
>"lcd.clear();". Die Ausgabe wird dann durch das Löschen bei Änderungen
>immer kurz flackern.

Unsinn. Warum soll man das gesamte Display löschen, wenn sich nur ein 
kleiner Teil ändert.

MfG Spess

von Alex R. (itaxel)


Lesenswert?

spess53 schrieb:
> Unsinn. Warum soll man das gesamte Display löschen, wenn sich nur ein
> kleiner Teil ändert.

Angenommen es wird die Zahl "123" angezeigt, danach dann die Zahl "55", 
dann hast du immer noch die "3" von "123" hinten dran: "553".

Jürgen's Info ist korrekt sofern nichts anderes angezeigt werden soll 
und die anzuzeigende Zahl ihre Stelle öfters ändert.
Ist die Anzahl der Stellen immer gleich dann braucht man den clear 
Befehl natürlich nicht.
Natürlich kann man das auch mit zusätzlichem space (" ") entfernen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.