Ein einfacher Sketch für eine LCD-Uhr.
Die Schaltung verwendet ein Standard-LCD, wobei die Hintergrundbeleuchtung nicht verwendet wird:
Als Zeitbasis verwende ich erst einmal nur zwei Delays mit je 500 ms als Sekundentakt. Das ist zwar nicht sehr genau - reicht aber aus, um zu zeigen, wie man die Anzeige organisieren kann.
Die Zeit soll im üblichen Format (Minuten und Sekunden) mit blinkendem Doppelpunkt angezeigt werden:
10:45
Listing:
#include
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int Sekunden = 0;
int Minuten = 0;
void setup() { // put your setup code here, to run once:
lcd.begin(16, 2);
lcd.print("Super-Uhr");
}
void loop() {
lcd.setCursor(0, 1);
if (Minuten < 10)
{
lcd.print("0");
}
lcd.print(Minuten);
lcd.print(":");
if (Sekunden < 10)
{
lcd.print("0");
}
lcd.print(Sekunden);
delay(500);
lcd.setCursor(2, 1); // Doppelpunkt ausschalten
lcd.print(" ");
delay(500);
Sekunden++;
if (Sekunden == 60)
{
Minuten++;
Sekunden = 0;
}
}
Und nun eine "ganz genau gehende" Uhr mit Timer-Interrupt.
Die Bibliothek "TimerOne.h" muss installiert werden:
https://playground.arduino.cc/code/timer1
Die Codezeilen, die mit TimerOne in Verbindung stehen, sind fett gedruckt!
Listing:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#include "TimerOne.h"
int alle_x_Sekunden = 1;
int Sekunden = 0;
int Minuten = 0;
void setup() { // put your setup code here, to run once:
lcd.begin(16, 2);
lcd.print("Super-Uhr");
Timer1.initialize(alle_x_Sekunden * 1000000);
Timer1.attachInterrupt(Takt);
}
void Takt() {
lcd.setCursor(0, 1);
if (Minuten < 10)
{
lcd.print("0");
}
lcd.print(Minuten);
lcd.print(":");
if (Sekunden < 10)
{
lcd.print("0");
}
lcd.print(Sekunden);
//lcd.setCursor(2, 1); // Doppelpunkt ausschalten
//lcd.print(" ");
Sekunden++;
if (Sekunden == 60)
{
Minuten++;
Sekunden = 0;
}
}
void loop() {
}
.