#include <LiquidCrystal.h>
//----LCD-PINS---(rs, en,d4,d5,d6,d7)----------------------//
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int LEDrot = 9;
int LEDgruen = 10;
int LEDblau = 6;
int rothelligkeit=0;
int gruenhelligkeit=255;
int fadeschritte=3;
int piezo = 7;
int piezoCount = 0;
/***************Countdownzeit HIER eintragen****************/
int const inputtime = 100; // in Sekunden
//----------------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);
pinMode(piezo, OUTPUT);
}
void loop()
{
val = digitalRead(tick); // Overflow des Timers auslesen
if (countdowntime>0)
{
analogWrite(LEDrot, rothelligkeit);
analogWrite(LEDgruen, gruenhelligkeit);
rothelligkeit=rothelligkeit + fadeschritte;
if (gruenhelligkeit > 0){
gruenhelligkeit=gruenhelligkeit - fadeschritte;
}
if (rothelligkeit < 255){
rothelligkeit=rothelligkeit + fadeschritte;
}
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");
if (piezoCount < 3)
{
digitalWrite(piezo, HIGH);
delay(50);
digitalWrite(piezo, LOW);
piezoCount += 1;
delay(50);
}
}
}