#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Adresse des LCD Displays
LiquidCrystal_I2C lcd(0x27, 16, 2); // 0x27 ist die I2C-Adresse für das Display, 16 Zeichen, 2 Zeilen
//Countdown
int potPin = A0; // Potentiometer an Pin A0
int buttonPin = A1; // Pin für den Push-Button
int countdownTime = 0; // Countdown-Zeit in Minuten
bool countdownStarted = false;
//Relais
int button1Pin = 6; // Pin für den ersten Schalter
int button2Pin = 7; // Pin für den zweiten Schalter
int relay1Pin = 8; // Pin für das erste Relais
int relay2Pin = 9; // Pin für das zweite Relais
int button1State = 0; // Variable für den Zustand des ersten Schalters
int button2State = 0; // Variable für den Zustand des zweiten Schalters
//
int hours = 0;
int minutes = 0;
void setup() {
lcd.begin(16,2);
//lcd.backlight(); // LCD-Hintergrundbeleuchtung einschalten
lcd.print("Set Time:");
// Pinmodi festlegen
pinMode(buttonPin, INPUT);
pinMode(button1Pin, INPUT);
pinMode(button2Pin, INPUT);
pinMode(relay1Pin, OUTPUT);
pinMode(relay2Pin, OUTPUT);
// Initialzustand der Relais
digitalWrite(relay1Pin, LOW); // Relais 1 ausgeschaltet
digitalWrite(relay2Pin, LOW); // Relais 2 ausgeschaltet
}
void loop() {
// Potentiometer-Wert lesen (0-1023) und in Sekunden umwandeln (0-100)
int potValue = analogRead(potPin);
countdownTime = map(potValue, 0, 1023, 0, 180);
// Minuten in Stunden und Minuten umrechnen
hours = countdownTime / 60;
minutes = countdownTime % 60;
// Zeit anzeigen
lcd.setCursor(0, 1);
lcd.print("Time: ");
lcd.print(hours);
lcd.print("h ");
lcd.print(minutes);
lcd.print("m ");
delay(500); // Kurze Pause zur Stabilisierung der Anzeige
// Überprüfen, ob der Button gedrückt wurde
if (digitalRead(buttonPin) == HIGH && !countdownStarted) {
countdownStarted = true; // Verhindert, dass der Countdown erneut gestartet wird
startCountdown();
}
// Zustand der Schalter lesen
button1State = digitalRead(button1Pin);
button2State = digitalRead(button2Pin);
// Relais 1 schalten
if (button1State == HIGH) {
digitalWrite(relay1Pin, HIGH); // Relais 1 einschalten
} else {
digitalWrite(relay1Pin, LOW); // Relais 1 ausschalten
}
// Relais 2 schalten
if (button2State == HIGH) {
digitalWrite(relay2Pin, HIGH); // Relais 2 einschalten
} else {
digitalWrite(relay2Pin, LOW); // Relais 2 ausschalten
}
}
void startCountdown() {
int totalSeconds = (hours * 3600) + (minutes * 60);
while (totalSeconds >= 0) {
int displayHours = totalSeconds / 3600;
int displayMinutes = (totalSeconds % 3600) / 60;
int displaySeconds = totalSeconds % 60;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Countdown:");
lcd.setCursor(0, 1);
lcd.print(displayHours);
lcd.print("h ");
lcd.print(displayMinutes);
lcd.print("m ");
lcd.print(displaySeconds);
lcd.print("s");
delay(1000); // 1 Sekunde warten
totalSeconds--;
}
//for (int i = countdownTime; i >= 0; i--) {
// lcd.clear();
// lcd.setCursor(0, 0);
// lcd.print("Countdown:");
// lcd.setCursor(0, 1);
// lcd.print(i);
// lcd.print(" sec");
// delay(1000); // 1 Sekunde warten
// Optional: Abbruchbedingung hinzufügen
// if (i == 0) {
// lcd.clear();
// lcd.setCursor(0, 0);
// lcd.print("Time's up!");
}