Today we proudly present our 🎉first🥳 guest post (written in german) about an Arduino cuckoo clock project...
Heute habe ich eine Wette um 2 Packungen Gummibärchen gewonnen. Es ging darum, wer die bessere Uhr mit einem Arduino baut.
Der Aufbau
(Snapshot von Tinkercad)
- Die aktuelle Uhrzeit kann man mit 2 Knopfen einstellen.
- Die Uhrzeit und die Temperatur wird nachdem der Startbildschirm erschienen ist (Smileys) auf dem LCD-Display angezeigt.
- Die Helligkeit des LCD-Displays ist mit einem Potentiometer einstellbar.
- Immer zur vollen Stunde singt der Kukkuck.
Der Programmcode
Hier wird die Bibliothek LiquidCrystal Library aufgerufen, die das Ansteuern des LCD-Displays deutlich vereinfacht:
#include <LiquidCrystal.h>
LiquidCrystal lcd(7,6, 13,12,11,10);
So kann man eigene Zeichen auf das LCD-Display schreiben.
0
steht für aus und 1
steht für an.
byte smiley[8] = {
B00000,
B10001,
B00000,
B00000,
B10001,
B01110,
B00000,
Die Temperatur wird vom Sensor abgelesen...und ständig aktualisiert.
currentVoltage = (analogRead(tempPin) / 1024.0) * 5.0;
Serial.print("current voltage: ");
Serial.println(currentVoltage);
float currentTemp = (currentVoltage - 0.5) * 100;
Serial.print("current temp: ");
Serial.println(currentTemp);
Immer zur vollen Stunde wird...auf dem lcd Display "Kukkuck" angezeigt und dabei das Kukkuckslied gespielt:
if (currentSecond == 0 && currentMinute == 0) {
currentHour = updateCounter(currentHour, 23);
lcd.clear();
lcd.print("kuckuck...");
playCuckoo();
lcd.clear();
lcd.setCursor(0, 1);
lcd.print(" kuckuck...");
currentSecond = 17;
}
Hier wird geschaut ob ein Knopf gedrückt wurde, was mit einem kurzen beep tone(tonePin, 440, 100)
untermalt wird.
boolean okPressed = false;
while (!okPressed) {
okPressed = checkOkPressed();
incSwitchState = digitalRead(incPin);
if (incSwitchState != prevIncSwitchState) {
if (incSwitchState == LOW) {
Serial.println("inc pressed");
tone(tonePin, 440, 100);
currentHour = updateCounter(currentHour, 23);
printTime("Stunde...");
}
}
prevIncSwitchState = incSwitchState;
}
In einer zentralen Funktion wird das LCD-Display aktualisiert und bei einer Stunde/Minute unter 10
wird eine 0
davor gesetzt...
void printTime(String lineTwo) {
lcd.clear();
lcd.print(zeroPad(currentHour));
lcd.print(":");
lcd.print(zeroPad(currentMinute));
lcd.print(":");
lcd.print(zeroPad(currentSecond));
lcd.setCursor(0, 1);
lcd.print(lineTwo);
}
Und hier ein Auszug aus dem Kukkuckslied...
void playCuckoo() {
c();
a();
pause(vi);
c();
a();
pause(vi);
...
}
samt den Noten/Pausen:
void c() {
tone(tonePin, 523);
delay(vi);
}
...
void pause(int p) {
noTone(tonePin);
delay(p);
}
Das Ergebnis in Farbe 🥳