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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.