const int buttonPin = 2; // a nyomógomb lába
const int outputPin = 3; // a kimenet lába 15 másodpercenként váltakozik, mikor fut a program
const int led60Pin = 4; // 60 perces LED lába
const int led90Pin = 5; // 90 perces LED lába
const int led120Pin = 6; // 120 perces LED lába
const int startEndPin = 7; // kezdet és vég LED lába, program futása alatt HIGH
const int togglePin = 8; // lábon kapcsolás LED lába - amíg áram alatt van a modul, addig HIGH
int buttonState = 0;
int previousButtonState = 0;
int timerValue = 30;
unsigned long previousMillis = 0;
unsigned long ledToggleMillis = 0; // Utolsó LED be- vagy kikapcsolás ideje
bool outputActive = false;
bool programStarted = false; // Jelzi, hogy elindult-e a program
void setup() {
pinMode(buttonPin, INPUT);
pinMode(outputPin, OUTPUT);
pinMode(led60Pin, OUTPUT);
pinMode(led90Pin, OUTPUT);
pinMode(led120Pin, OUTPUT);
pinMode(startEndPin, OUTPUT);
pinMode(togglePin, OUTPUT);
// Alapállapotban a togglePin LED-je be van kapcsolva
digitalWrite(togglePin, HIGH);
}
void loop() {
unsigned long currentMillis = millis();
// Nyomógomb állapotának leolvasása
buttonState = digitalRead(buttonPin);
// Nyomógomb állapotának ellenőrzése
if (buttonState != previousButtonState) {
if (buttonState == HIGH) {
timerValue += 30;
if (timerValue > 120) {
timerValue = 60; // Ha már 120 percnél többet választott, visszaállítjuk 60 percre
}
}
// Kis várakozás a debounce miatt
delay(500);
}
// Nyomógomb állapotának frissítése
previousButtonState = buttonState;
// Kimenet be- vagy kikapcsolása az időzítés alapján
if (currentMillis - previousMillis >= timerValue * 60000 && outputActive) {
digitalWrite(outputPin, LOW); // Kikapcsoljuk a kimenetet
digitalWrite(startEndPin, LOW); // Kikapcsoljuk a kezdet és vég LED-eket
digitalWrite(led60Pin, LOW); // Minden LED kikapcsolása
digitalWrite(led90Pin, LOW);
digitalWrite(led120Pin, LOW);
outputActive = false;
programStarted = false; // A program leállt, visszaállítjuk a jelzőt
} else if (buttonState == HIGH && !outputActive) {
digitalWrite(outputPin, HIGH); // Bekapcsoljuk a kimenetet
digitalWrite(startEndPin, HIGH); // Bekapcsoljuk a kezdet és vég LED-eket
outputActive = true;
programStarted = true; // A program elindult
}
// LED-ek beállítása az időzítés szerint, csak ha a program elindult
if (programStarted) {
if (timerValue == 60) {
digitalWrite(led60Pin, HIGH);
digitalWrite(led90Pin, LOW);
digitalWrite(led120Pin, LOW);
} else if (timerValue == 90) {
digitalWrite(led60Pin, LOW);
digitalWrite(led90Pin, HIGH);
digitalWrite(led120Pin, LOW);
} else if (timerValue == 120) {
digitalWrite(led60Pin, LOW);
digitalWrite(led90Pin, LOW);
digitalWrite(led120Pin, HIGH);
}
} else {
// Ha a program nem indult el, akkor minden LED kikapcsolása
digitalWrite(led60Pin, LOW);
digitalWrite(led90Pin, LOW);
digitalWrite(led120Pin, LOW);
}
// D3 lábon 15 másodpercenként be- és kikapcsolgatás, csak ha a program elindult
if (programStarted && currentMillis - ledToggleMillis >= 15000) {
digitalWrite(outputPin, !digitalRead(outputPin));
ledToggleMillis = currentMillis;
}
}