Forum: Mikrocontroller und Digitale Elektronik Arduino LCD Variable count


von KoE (Gast)


Lesenswert?

Guten Abend,
1
case 1: // maxScore Set
2
        lcd.clear();
3
        lcd.setCursor(0, 0);
4
        lcd.print("Maximale");
5
        lcd.setCursor(0, 1);
6
        lcd.print("Punktezahl : ");;
7
        while_OnOff = 1;
8
          while ( while_OnOff == 1 )
9
          {
10
            short int buttonVar = buttonPress();
11
            if( buttonVar == 2 && score < maxScore )
12
              {
13
                score++;
14
              }
15
            if( buttonVar == 3 && score > 0 )
16
              {
17
                score--;
18
              }
19
            if( buttonVar == 1 )
20
              {
21
                while_OnOff = 0;
22
                case_RunStatus = 2;
23
              }
24
            lcd.setCursor(13, 1);
25
            lcd.print(score);
26
          }
27
        break;

Ich möchte auf dem LCD eine Variable Ausgeben (score). Diese kann mit 
der Taste Up/Down erhöt und verringert werden. Dies ist auch kein 
Problem.

Mein Problem ist das Richtige anzeigen dieser Variable auf dem LCD. 
Sobald ich eine zehner,hunderter stelle erreiche mit der Taste Up ist 
noch alles in Ordnung:

1,2...10....100...1000

Sobald ich aber herunterzähle z.b von 100 auf 99 wird mir die Letzte 
NULL(0) nicht gelöscht und es liest sich : 990 auf dem LCD. Wie kann ich 
dies beheben ?

Am liebsten währe mir eine Lösung bei der sich die Zahl von Links nach 
Rechts abbaut:

1000
x100
xx10
xxx0

(x dient nur als Platzhalter, diese stellen sollten leer sein beim LCD).

Mfg Koe

von holger (Gast)


Lesenswert?

lcd.setCursor(13, 1);
        lcd.print("    ");
        lcd.setCursor(13, 1);
        lcd.print(score);

von KoE (Gast)


Lesenswert?

holger schrieb:
> lcd.setCursor(13, 1);
>         lcd.print("    ");
>         lcd.setCursor(13, 1);
>         lcd.print(score);

Danke holger

Warum ist es nötig den setCursor zwei mal zu setzten habe dies getestet 
und es geht nur wenn er zwei mal gesetzt wird. Bleibt der cursor nicht 
an der zuletzt aufgerufener Position ?

Ist es noch möglich das "Wachsen" der Variable zu steuern ?

Von Rechts nach Links bein hochzählen:

xx0
x10
100

Von Links nach rechts beim Herunterzählen:

100
x10
xx0

Mfg Koe

von holger (Gast)


Lesenswert?

>Ist es noch möglich das "Wachsen" der Variable zu steuern ?

Natürlich ist das möglich. Denk doch mal nach.
Wenn du rechtsbündig möchtest:

Anzeige ist kleiner 10, 3 Leerzeichen schreiben dann Wert
Anzeige ist kleiner 100, 2 Leerzeichen schreiben dann Wert
Anzeige ist kleiner 1000, 1 Leerzeichen schreiben dann Wert
Anzeige ist größer gleich 1000, kein Leerzeichen schreiben dann Wert

von KoE (Gast)


Lesenswert?

holger schrieb:
>>Ist es noch möglich das "Wachsen" der Variable zu steuern ?
>
> Natürlich ist das möglich. Denk doch mal nach.
> Wenn du rechtsbündig möchtest:
>
> Anzeige ist kleiner 10, 3 Leerzeichen schreiben dann Wert
> Anzeige ist kleiner 100, 2 Leerzeichen schreiben dann Wert
> Anzeige ist kleiner 1000, 1 Leerzeichen schreiben dann Wert
> Anzeige ist größer gleich 1000, kein Leerzeichen schreiben dann Wert

Ok Danke

von Jan L. (ranzcopter)


Lesenswert?

...schau' dir mal dtostrf() an, vielleicht die universellere Lösung...

von holger (Gast)


Lesenswert?

>...schau' dir mal dtostrf() an, vielleicht die universellere Lösung...

Kopf, Tisch, Kopf, Tisch...Aua

von Sebastian S. (amateur)


Lesenswert?

>Warum ist es nötig den setCursor zwei mal zu setzten habe dies getestet
>und es geht nur wenn er zwei mal gesetzt wird. Bleibt der cursor nicht
>an der zuletzt aufgerufener Position ?
Nein der Cursor wird "mitgeschleift". Ist ja auch sinnvoll!

Wie beim Schreiben z.B. mit Deinem Editor, wird die Schreibmarke, mit 
jeder Ausgabe mitgeführt.
Wie beim Schreiben mit Deinem Editor muss Du explizit zurückgehen, um 
eine vorherige Ausgabe zu korrigieren/überschreiben.

Für einen Test brauchst Du nur die zweite Positionierung herausnehmen. 
Schon läuft die Ausgabe "durch".

von Arduinoquäler (Gast)


Lesenswert?

KoE schrieb:
> lcd.clear();
..........

char strtmp[6];

sprintf (strtmp, "Punktezahl %4d", score);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print(strtmp);

von Sebastian S. (amateur)


Lesenswert?

@Arduinoquäler
Willst Du die 6 in "char strtmp[6];" nicht ein wenig aufrunden?
So auf 16 oder so?

von holger (Gast)


Lesenswert?

//sprintf (strtmp, "Punktezahl %4d", score);

Also wenn schon sprintf dann richtig:

sprintf (strtmp, "Punktezahl % 4d", score);

von Arduinoquäler (Gast)


Lesenswert?

Sebastian S. schrieb:
> Willst Du die 6 in "char strtmp[6];" nicht ein wenig aufrunden?

Ja wär besser. Anfangs wollte ich nur das int darstellen,
dann hätte es gereicht.

von Sebastian S. (amateur)


Lesenswert?

Ach so, ich vergaß:
Werden die Komfortfunktionen wie z.B. sprintf nicht sowieso an anderer 
Stelle verwendet, so würde ich mir die Einbindung der zugehörigen 
Bibliothek aus Platzgründen noch mal überlegen...
Geht es aber um Geschwindigkeit, so ist eine zweifache Ausgabe via 
lcd.print() auch nicht das Gelbe vom Ei.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

holger schrieb:
> Also wenn schon sprintf dann richtig:
>
> sprintf (strtmp, "Punktezahl % 4d", score);

Wenn "richtig", dann aber ohne Leerzeichen nach dem Prozentzeichen. Da 
gehört keines hin.

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.