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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy