From bad613780edb40cddba5374312658c7b8b5d9780 Mon Sep 17 00:00:00 2001 From: Jannis Date: Tue, 22 Sep 2026 16:25:32 +0200 Subject: [PATCH] schaltuhr und temp lohik --- main.ino | 65 ++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 47 insertions(+), 18 deletions(-) diff --git a/main.ino b/main.ino index 8ba71d6..59d0c11 100644 --- a/main.ino +++ b/main.ino @@ -26,6 +26,7 @@ FastAccelStepper *stepper = NULL; // ################ Variabeln ################ const uint32_t MAX_SPEED_HZ = 106000; +const int32_t COLDTEMP_C = 50; bool clickPlus = 0; bool clickMinus = 0; @@ -37,8 +38,8 @@ bool holdStop = 0; int32_t lastControl = 0; uint32_t lastPlotTime = 0; -uint32_t lastDispTime = 0; -bool stop = false; +uint32_t lastDispTime = 0; +bool autoStop = false; bool bSettings = false; uint32_t curTemp = 0; @@ -52,7 +53,7 @@ struct settings{ int endMin = 0; bool timerEnabled = false; bool editMaxTemp = false; - int maxTemp = 50; //in °C + int maxTemp = 70; //in °C bool editAcc = false; int32_t accelRate = 2000; } @@ -160,6 +161,22 @@ int getTempInC(uint8_t senTemp){ return ((milliVolt - 500)/10) } +// Liefert true wenn der Timer aktuell Active ist und false wenn nicht aktiv +bool isTimerActiveNow(int curH, int curM, int startH, int startM, int endH, int endM) { + int current = curH * 60 + curM; + int start = startH * 60 + startM; + int end = endH * 60 + endM; + + // Fall A: Zeitfenster am selben Tag (z. B. 08:00 bis 16:00) + if (start <= end) { + return (current >= start && current < end); + } + // Fall B: Zeitfenster über Mitternacht (z. B. 22:00 bis 04:00) + else { + return (current >= start || current < end); + } +} + // Die Funktion behandelt das gesammte Einstellungs menu void setting(){ //######### Timer Edit ######### @@ -275,22 +292,23 @@ void setting(){ } void updateDisplay(){ - if (millis() - lastDispTime >= 50) { - lastDispTime = millis(); - int32_t currentSpeed = stepper->getCurrentSpeedInUs() == 0 ? 0 : (1000000 / stepper->getCurrentSpeedInUs()); + if (millis() - lastDispTime >= 50) { + lastDispTime = millis(); + int32_t currentSpeed = stepper->getCurrentSpeedInUs() == 0 ? 0 : (1000000 / stepper->getCurrentSpeedInUs()); - // einstellungs fenster - if(bSettings){ - // Mein Menu + // einstellungs fenster + if(bSettings){ + // Mein Menu - // Uhrzeit + // Uhrzeit - // Cursor mit settingIdx - //EDIT_START_HOUR - //EDIT_START_MIN - //EDIT_END_HOUR - //EDIT_END_MIN + // Cursor mit settingIdx + //EDIT_START_HOUR + //EDIT_START_MIN + //EDIT_END_HOUR + //EDIT_END_MIN + } } } @@ -330,15 +348,26 @@ void loop() { getInputs(clickPlus, clickMinus, clickStop, holdPlus, holdMinus, holdStop); curTemp = getTempInC(senTemp); + // zeitschaltuhr prüfen + int curH, curM, curS; + if (settings.timerEnabled && getCurrentTime(curH, curM, curS)) { + bool shouldRun = isTimerActiveNow(curH, curM, settings.startHour, settings.startMin, settings.endHour, settings.endMin); + } + + if(curTemp >= settings.maxTemp || !shouldRun){ + autoStop = true; + }else if(curTemp <= COLDTEMP_C){ + autoStop = false; + } + // Main Control if(bSettings){ settings() - }else if(clickStop || stop){ + }else if(clickStop || autoStop){ stepper->stopMove(); speed = 0; - if(clickPlus){ + if(clickStop && clickPlus){ bSettings = true; - settings(); } }else if(holdPlus){ speed = accelRate;