Hallo Forum!
ich habe längere Zeit damit zugebracht im Internet einen schönen Countdown Timer für ein LCD zu finden, da ich mein Belichtungsgerät nicht immer mit der Stoppuhr vom Handy bedienen wollte.
Gefunden hab ich nichts, deswegen hab ich ihn mir selbst geschrieben. Und ich denke es könnte dem einen oder anderen mal behilflich sein.
Momentan kann der Code folgendes:
- 2 Zeiliges LC-Display mit 16 Zeichen ansteuern
- Eingabe der Zeit erfolgt über Variablen änderung im Code
- 1 Zeile : Beliebige beschriftung + Anzeige der voreingestellten Countdownsekunden in Minuten und Sekunden
-
- Zeile : Anzeige der aktuell ablaufenden Countdownzeit.
- Resetbutton ( ohne Tasten entprellung ) an Pin 7 (überprüfung auf HIGH)
eingebunden ist lediglich die LiquidCrystal Library (keine Timer.h oder ähnliches)
Vorraussichtliche Verbesserungen:
- Eingabe der Zeit über Potentiometer und AnalogIN
- Pause Button
- Ansteuern eines Mosfet bei 00:00 (zur Ansteuerung der UV-Röhre)
#include <LiquidCrystal.h>
//----LCD-PINS---(rs, en,d4,d5,d6,d7)----------------------//
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
/***************Countdownzeit HIER eintragen****************/
int const inputtime = 180; // in Sekunden
//------------------------ Taster -------------------------//
int buttonstate;
int const buttonPin = 7; // Resetbutton Pin Deklarierung
//----------------Variablen für Countdown------------------//
int long countdowntime; // Countdown Variable bzw. Resetwert
int val; // Variable für aktuellen Zustand
int lastval; // Variable für den vorherigen Zustand
int long minutes; // Countdown in Minuten
int long seconds; // Countdown in Sekunden
volatile unsigned char tick; // Variable für den Timer
//--------------- Timer Überlauf auslesen ------------------//
ISR (TIMER2_OVF_vect) // Wenn Timer 1 Überläuft gib ein High über
{
-tick; // tick aus.
}
void setup() {
countdowntime = inputtime;
int showminutes = inputtime/60; // erstelle Variable für die anzuzeigenden Minuten
int showseconds = inputtime%60; // erstelle Variable für die anzuzeigenden Sekunden
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print("Countdown: "); // Beschriftung der ersten Zeile
lcd.print(showminutes); // Zeit wird automatisch eingetragen
lcd.print(":");
lcd.print(showseconds);
}
void loop()
{
val = digitalRead(tick); // Overflow des Timers auslesen
buttonstate = digitalRead(buttonPin); // auslesen des Digitalwertes an Pin 7
if (buttonstate == HIGH) // überprüfung auf Reset
{
countdowntime = inputtime; // Resetbefehl
}
if (countdowntime>0)
{
if (val!= lastval) // wenn aktueller Zustand sich von Vorherigem unterscheidet dann
{
countdowntime--; // inkrementiere die Variable "countdowntime"
}
minutes = countdowntime/60; // Aufteilung der "countdowntime" in Minuten
seconds = countdowntime%60; // und Sekunden
lcd.setCursor(0,1); // LCD ausgabe in Zeile 2 Zeichen 1
if (minutes<10)
{
lcd.print('0');
}
lcd.print(minutes); // gebe Minuten am LCD aus
lcd.print(":");
if (seconds<10) // wenn die Sekunden unter 10 kommen
{
lcd.print("0"); // schreibe erst Null und dann
lcd.print(seconds); // die Sekunden
lcd.write(' '); // entfernen der Null
}
else // ansonsten
{
lcd.print(seconds); // schreibe die Sekunden normal
}
delay(1000);
val = lastval; // Den aktuellen Zustand merken
}
else
{
lcd.setCursor(0,1);
lcd.print("00:00"); // Null anzeigen
buttonstate = digitalRead(buttonPin);// Überprüfung des Digitalwertes an Pin 7
if (buttonstate == HIGH) // Überprüfung auf Reset Befehl
{
countdowntime = inputtime; // Reset ausführen
}
}
}
LG M²