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


Bild: Uhr



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.