|
Digitaluhr
Ziel
Wir programmieren eine einfache Digitaluhr, die Stunde, Minute
und Sekunde anzeigt.
Die Startzeit wird im Programm festgelegt.
Vielleicht arbeitest Du erst die einfachere Variante dieses
Problemes durch, das Vorgängerexperiment: "Zeitanzeige".
Wie genau ist diese Uhr?
Arduino enthält einen Quarz.
Der ist zwar kein Uhrenquartz aber immer noch genau genug, um
fast die Genauigkeit einer Quarzuhr zu erreichen.
Zu bewältigende Probleme
- So eine digitale Uhrzeitanzeige hat das Problem, dass die
Sekunden und die Minuten bis 59 hochzählen und die Stunden
bis 23.
- Hinzu kommt, dass wir gerne führende Nullen sehen wollen:
wenn es 10:04:55 Uhr ist, soll da nicht stehen: 10:4:55 Uhr.
Hier das Programm:
/*
Digitaluhr für SainSmart LCD Keypad Shield V1.0
www.arduinospielwiese.de
*/
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7); //diese
Arduino-Pins werden benutzt
int stunde=9, minute=59; //hier die Uhrzeit einstellen
int sekunde_neu, sekunde_alt;
void setup()
{
lcd.clear();
lcd.begin(16, 2);
}
void loop()
{
lcd.setCursor(4,0);
sekunde_neu = (millis()/1000) % 60; // Das %-Zeichen
ist der Modulo-Operator
// Zeit nur ausgeben, wenn Sekunde sich verändert hat
if(sekunde_neu != sekunde_alt)
{
if (sekunde_neu == 0)
{
minute++;
if (minute==60)
{
minute=0;
stunde++;
if (stunde==24)
stunde=0;
}
}
if (stunde<10) lcd.print("0"); //
führende Null
lcd.print(stunde);
lcd.print(":");
if (minute<10) lcd.print("0");
lcd.print(minute);
lcd.print(":");
if (sekunde_neu<10) lcd.print("0");
lcd.print(sekunde_neu);
sekunde_alt = sekunde_neu;
}
}
Mögliche Erweiterungen
Statt die Startzeit bereits im Programm festzulegen, könnte man
die auf dem Shield befindlichen Tasten benutzen, um die Uhrzeit
einzustellen.
|