1stellige Zahl 2 stellig ausgeben 16x2 Display

Hallo

ich hab einen DS1307 und ein LCD Display 16x2 Zeichen an meinen Arduino. Mein Problem ist nur 15:2:3 Uhr sieht doof aus :grin: Wie kann ich das anpassen das er daraus 15:02:03Uhr macht?

Hier der wichtige Code Abschnitt:

...
DateTime now = RTC.now();
stundeakt = now.hour();
minuteakt = now.minute();
sekundakt = now.second();
...
lcd.setCursor(0,0);
lcd.print("  ");
lcd.print(stundeakt);
lcd.print(":");
lcd.print(minuteakt);
lcd.print(":");
lcd.print(sekundakt);
lcd.print(" Uhr  ");
...

ich würde behaupten der ganze Code ist nicht nötig oder?

mfg

Chris

Ist doch gar nicht so schwer: Wenn du weißt, dass die Minuten- bzw. Sekundenzahl einstellig (das heißt kleiner als 10) ist, schreibst du eine zusätzliche Null aufs Display.

1 Like

an die Stirn hau

     if (stundeakt < 10)
     {
       lcd.print("0");
     }
     lcd.print(stundeakt);
     lcd.print(":");
     if (minuteakt < 10)
     {
       lcd.print("0");
     }
     lcd.print(minuteakt);
     lcd.print(":");
     if (sekundakt < 10)
     {
       lcd.print("0");
     }

danke :slight_smile:

1 Like

Hallo Chris,
ich habe das so gelöst:

    char time[8];
    sprintf(time, "%02d:%02d:%02d",p.hour, p.minute, p.second);
    lcd.print(time);
    char date[10];
    sprintf(date, "%02d.%02d.%02d",p.day, p.month, p.year);
    lcd.setCursor(0, 3);
    lcd.print(date);

p.hour, p.minute, usw sind int, die direkt aus der Library üebrgeben werden, müsstest du also mit deinen int sundeakt, minuteakt, usw ersetzen .
Gruß
Reinhard

Und ich so:

 {
    lcd.clear();
    char lcdline[17];
    lcd.setCursor(3,0);
    sprintf(lcdline,"%02d:%02d:%02d",hour(),minute(),second());
    lcd.print(lcdline);
    lcd.setCursor(3,1);
    sprintf(lcdline,"%02d.%02d.%04d",day(),month(),year());
    lcd.print(lcdline);
 }

char lcdline[17];
lcd.setCursor(3,0);
lcd.print(lcdline);

geht aber nur bei LCD mit einer Breite von 20 Zeichen (siehe Thread Titel :wink: )

Ja? Und warum gehts dann bei meinem 16x2 ?

du fängst bei Spalte 3 mit der Ausgabe an und gibst 18 Zeichen (lcdline[17]) aus, von den aber nur 8 oder 10 Zeichen mit Inhalt sind, deshalb passt alles drauf.
Die "leeren Stellen" laufen rechts raus.
Ein lcdline[15] hätte also gereicht.

erni-berni:
geht aber NUR bei LCD mit einer Breite von 20 Zeichen

geht also auch mit 16x2 :wink:

OK , ich korrigiere mich:
Für eine speicheroptimierte Programmierung reicht als Definition char lcdline[10];