Go Down

Topic: 1stellige Zahl 2 stellig ausgeben 16x2 Display (Read 1 time) previous topic - next topic

chrisi01

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  :smiley-mr-green: Wie kann ich das anpassen das er daraus 15:02:03Uhr macht?

Hier der wichtige Code Abschnitt:

Code: [Select]

...
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

sth77

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.
Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

chrisi01

*an die Stirn hau*

Code: [Select]


     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 :)

erni-berni

#3
Apr 06, 2013, 03:20 pm Last Edit: Apr 06, 2013, 03:22 pm by erni-berni Reason: 1
Hallo Chris,
ich habe das so gelöst:
Code: [Select]
   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

skorpi08

Und ich so:
Code: [Select]

{
    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);
}
Nicht Mensch, nicht Tier: Programmierer halt...

erni-berni

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

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

skorpi08

Ja? Und warum gehts dann bei meinem 16x2 ?
Nicht Mensch, nicht Tier: Programmierer halt...

erni-berni

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.

skorpi08


geht aber NUR bei LCD mit einer Breite von 20 Zeichen


geht also auch mit 16x2 ;)
Nicht Mensch, nicht Tier: Programmierer halt...

erni-berni

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

Go Up