Forum: Mikrocontroller und Digitale Elektronik Messwert-Ausgabe falsch


von Rene T. (hifi-freak)


Lesenswert?

Hallo!
wieder ne Frage...

ich habe einen Wert, der am Display ausgegeben werden soll....ist ein 
INT-Wert

nun komm ich nicht dahinter, warum mir dieser Wert wie folgt ausgegeben 
wird->

z.b. 140.....richtige Anzeige
dann 20......Ausgabe aber 200
....irgendwie haperts da mit dem Entfernen der 0 und dem Verschieben des 
Werts


bitte um Hilfe!

von spess53 (Gast)


Lesenswert?

Hi

>....irgendwie haperts da mit dem Entfernen der 0 und dem Verschieben des
>Werts

Löscht oder überschreibst du das komplette Anzeigefeld?

MfG Spess

von Karl H. (kbuchegg)


Lesenswert?

Rene Trattner schrieb:
> Hallo!
> wieder ne Frage...
>
> ich habe einen Wert, der am Display ausgegeben werden soll....ist ein
> INT-Wert
>
> nun komm ich nicht dahinter, warum mir dieser Wert wie folgt ausgegeben
> wird->
>
> z.b. 140.....richtige Anzeige
> dann 20......Ausgabe aber 200

wahrscheinlich, weil du

zuerst den Text 140 beginnend in der linken oberen Ecke deiner Anzeige 
schreibst
1
+-------------+
2
|140          |
3
|             |
4
+-------------+

und dann beginnend in der linken oberen Ecke, den Text "20" drüber 
schreibst.
1
+-------------+
2
|200          |
3
|             |
4
+-------------+

da aber der Text "20" kürzer ist, als der Text "140", überschreiben die 
beiden 'Buchstaben' von "20" eben nicht alle 3 vorher dort hin 
geschriebenen 'Buchstaben' von "140"

> ....irgendwie haperts da mit dem Entfernen der 0 und dem Verschieben des
> Werts

Ich denke, du hast das Problem schon erkannt.

> bitte um Hilfe!

KOmmt jetzt drauf an, wie du die Ausgabe programmiert hast. Da gibts ja 
mehrere Möglichkeiten. Am besten zeigst du mal dein Programm, dann kann 
man genauer darafu eingehen.

ABer eines ist fix. Um die Ausgabe von notwendigen Leerzeichen, die 
'nicht benötigte Stellen' an der Anzeige löschen, kommst du nicht herum. 
Darum musst du dich selber kümmern.

: Bearbeitet durch User
von Rene T. (hifi-freak)


Lesenswert?

1
        lcd.setCursor(1,1);
2
        lcd.print("thr.");
3
        x=throttle_value;   
4
        lcd.setCursor(9,1);
5
        lcd.print(x); 
6
        lcd.setCursor(17,1);
7
        lcd.print("PWM");

also im Display soll "thr:   33  PWM" stehen

sollt ich da eine IF-Schleife machen...sprich, wenn der Wert <100 ist
lcd.print (" "+x);

geht sowas?

dann schreib ich drüber

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Rene Trattner schrieb:
>
1
>         lcd.setCursor(1,1);
2
>         lcd.print("thr.");
3
>         x=throttle_value;
4
>         lcd.setCursor(9,1);
5
>         lcd.print(x);
6
>         lcd.setCursor(17,1);
7
>         lcd.print("PWM");
8
>
>
> also im Display soll "thr:   33  PWM" stehen
>
> sollt ich da eine IF-Schleife machen...

Es gibt keine if Schleifen. Das Wesen einer Schleife besteht darin, 
dass etwas wiederholt wird. Bei einem if wird kein Code wiederholt. Ein 
if trifft eine Entscheidung

> sprich, wenn der Wert <100 ist
> lcd.print (" "+x);
>
> geht sowas?

das wird so direkt nicht gehen. Aber du bist schon auf einem gangbaren 
Weg
1
   if( x < 100 )
2
     lcd.print( ' ' );
3
   if( x < 10 )
4
     lcd.print( ' ' );
5
6
   lcd.print( x );


schliesslich brauchst du ja bei Zahlen kleiner als 10 dann ja auch 2 
'führende' Leerstellen, um eien zuvor dort stehende 3 stellige Zahl 
vollinhaltlich zu überschreiben.
Und: niemand schreibt dir vor, dass du führende Leerstellen und die Zahl 
selber in einem einzigen Funktionsaufruf ausgeben musst :-)

: Bearbeitet durch User
von Rene T. (hifi-freak)


Lesenswert?

daaaaanke!

bin auch grad draufgekommen..habs bissl anders gelöst....geht aber auch

        if (x<100)
        {lcd.setCursor(9,1);lcd.print("0");
         lcd.setCursor(10,1);
         lcd.print(x);}
        if (x>100)
        {lcd.setCursor(9,1);lcd.print(x);}

von Karl H. (kbuchegg)


Lesenswert?

Rene Trattner schrieb:
> daaaaanke!
>
> bin auch grad draufgekommen..habs bissl anders gelöst....geht aber auch
>
>         if (x<100)
>         {lcd.setCursor(9,1);lcd.print("0");
>          lcd.setCursor(10,1);
>          lcd.print(x);}
>         if (x>100)
>         {lcd.setCursor(9,1);lcd.print(x);}

du brauchst nicht für jedes Zeichen einzeln einen setCursor aufrufen.
Alle AUsgabegeräte haben so etwas wie einen Cursor. Nach jeder Ausgabe 
wandert der Cursor weiter, so dass die nächste Ausgabe unmittelbar 
anschliesst.

Man muss ja nicht mutwillig den Rechner mit sinnlosen Aktionen 
beschäftigen.

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.