Forum: Mikrocontroller und Digitale Elektronik Arduino: LCD-Ausgabe formatieren


von Manfred (Gast)


Lesenswert?

Ich errechne mir Zeitangaben im Format 'Stunde:Minuten:Sekunden' und 
will diese in mein 20x4-LCD schreiben. Der Lesbarkeit halber immer mit 
Vornull 'hh:mm:ss'.

Aktuell baue ich mir einen String:
1
  String LCD_Line1 = "";
2
  if (hr < 10) {
3
    LCD_Line1 = LCD_Line1 + "0";
4
  }
5
  LCD_Line1 = LCD_Line1 + String(hr) +":";
6
7
  if (min < 10) {
8
    LCD_Line1 = LCD_Line1 + "0";
9
  }
10
  LCD_Line1 = LCD_Line1 + String(min) +":";
11
12
  if (sek < 10) {
13
    LCD_Line1 = LCD_Line1 + "0";
14
  }
15
  LCD_Line1 = LCD_Line1 + String(sek) +" Stunden";
16
17
  lcd.clear();
18
  lcd.setCursor(0,0);
19
  lcd.print(LCD_Line1);

In gleicher Weise will ich auch Meßwerte als jeweils komplette Zeile 
bauen und dann zügig ins Display schreiben.

Geht das irgendwie eleganter, kürzer und vor allem schneller?

Wichtig ist auch, möglichst keinen dynamischen Speicher für Globale 
Variablen zu belegen, im Gesamtprojekt droht der, etwas knapp zu werden.

von Zahlen Formatierer (Gast)


Lesenswert?

Manfred schrieb:
> Geht das irgendwie eleganter, kürzer und vor allem schneller?

Ja.

von Tom (Gast)


Lesenswert?

sprintf wäre mein erster Ansatz, falls es das bei Arduino gibt.

von Zahlen Formatierer (Gast)


Lesenswert?

1
    int hr = 8;
2
    int min = 13;
3
    int sec = 55;
4
    char LCD_Line1[40];
5
    
6
    sprintf(LCD_Line1, "%02d:%02d:%02d", hr, min, sec);
7
    printf (LCD_Line1);

von Walter S. (avatar)


Lesenswert?

Manfred schrieb:
> und vor allem schneller

wenn dein LCD flackert dann liegt das nicht an der Formatierung:
du solltest nicht das komplette LCD auf einmal löschen sondern immer nur 
ein Zeichen

von Stefan F. (Gast)


Lesenswert?

Es ist allerdings quatsch, zuerst einen Puffer mit sprintf zu befüllen, 
um diesen dann mit printf auszugeben. Da kann man auch gleich die ganze 
Ausgabe mit printf formatieren.

von Zahlen Formatierer (Gast)


Lesenswert?

Stefan U. schrieb:
> Da kann man auch gleich die ganze
> Ausgabe mit printf formatieren.

Käse. Klugsch....

Für

lcd.print(LCD_Line1);

braucht es einen Buffer.

von Stefan F. (Gast)


Lesenswert?

> Für lcd.print(LCD_Line1); braucht es einen Buffer.

von "lcd.print()" haben weder der Zahlen Formatierer noch ich was 
geschrieben.

von Manfred (Gast)


Lesenswert?

Zahlen Formatierer schrieb:
> int hr = 8;
>     int min = 13;
>     int sec = 55;
>     char LCD_Line1[40];
>
>     sprintf(LCD_Line1, "%02d:%02d:%02d", hr, min, sec);
>     printf (LCD_Line1);

Sprintf ist mir in den Arduino-Foren begegnet, eine wirklich sinnvolle 
Erklärung dazu eher nicht.

Gerade eingetippt: Belegt 500 Byte mehr an Programmspeicher und 2 Byte 
mehr des dynamischen Speichers, aber läuft schneller als mein Konstrukt 
- getestet und abgespeichert, Danke Dir.

Warum "char LCD_Line1[40]" mit 40?

Walter S. schrieb:
> wenn dein LCD flackert

Das hast Du falsch verstanden. Ich messe die Zeit vom Aufruf der 
Displayausgabe bis zur Rückkehr, die mir bei meinen bisherigen 
Stümpereien zu lang erschien. Geflacker habe ich nicht, da ich hier nur 
alle x-Sekunden beschreiben werde. In einer anderen Anwendung merke ich 
mir Werte und schreibe nur dann, wenn sich einer dieser verändert hat 
bzw. setze den Cursor und schreibe nur den Wert.

Stefan U. schrieb:
> Es ist allerdings quatsch, zuerst einen Puffer mit sprintf zu befüllen,
> um diesen dann mit printf auszugeben. Da kann man auch gleich die ganze
> Ausgabe mit printf formatieren.

Mache bitte einen konkreten Vorschlag, lcd.printf existiert nicht!

(Muss es jetzt wieder Hauerei geben?)

Beitrag #5345597 wurde von einem Moderator gelöscht.
Beitrag #5345599 wurde von einem Moderator gelöscht.
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.