Arduino: LCD-Ausgabe formatieren

Gast #5345520
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.
Gast #5345589
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren