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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Manfred (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-2 lesenswert
nicht lesenswert
Manfred schrieb:
> Geht das irgendwie eleganter, kürzer und vor allem schneller?

Ja.

von Tom (Gast)


Bewertung
0 lesenswert
nicht lesenswert
sprintf wäre mein erster Ansatz, falls es das bei Arduino gibt.

von Zahlen Formatierer (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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. (stefanus)


Bewertung
-2 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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. (stefanus)


Bewertung
-2 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.