// // Created by lukas on 10.11.20. // #include "Heating.h" #include "Pins.h" void Heating::init(Temperature *tempsensor, unsigned mode) { switch (mode) { case TIME: { const unsigned percentOn = 20; const unsigned refreshperiod = 900; const auto func = [this]() { mLuefterTicker.detach(); // every minute turn on the heating digitalWrite(LuefterPin, HIGH); digitalWrite(HeizungPin, HIGH); Serial.println("Turning on heating"); mTurnOffTicker.once((int)((float)refreshperiod * (float)percentOn / 100.0), []() { digitalWrite(HeizungPin, LOW); Serial.println("Turned off heating!"); }); mLuefterTicker.once((int)(((float)refreshperiod * (float)percentOn / 100.0) + 30.0), []() { digitalWrite(LuefterPin, LOW); Serial.println("Turned off fan!"); }); }; func(); mHeizungTicker.attach(refreshperiod, func); break; } case HUMIDITY: mFanWaiting = false; mHeizungTicker.attach(10, [&tempsensor, this]() { // shedule this function because tempread is blocking schedule_function([this, &tempsensor]() { // check temperature Serial.println("checking humidity"); const float hum = tempsensor->getHum(); if (hum == -1) return; Serial.print("humidity read: "); Serial.println(hum); if (hum > 65.0) { // turn off active turnoff timers mLuefterTicker.detach(); Serial.println("heating should run now!"); // turn on heating and fan digitalWrite(LuefterPin, HIGH); digitalWrite(HeizungPin, HIGH); // if fan waiting detach its ticker if (mFanWaiting) { mLuefterTicker.detach(); mFanWaiting = false; } } else if (hum < 60.0) { // if humidity too low turn off heating and fan after 60secs digitalWrite(HeizungPin, LOW); Serial.println("heating should NOT run now!"); if (!mFanWaiting) { mFanWaiting = true; mLuefterTicker.once(60, []() { // turn off fan digitalWrite(LuefterPin, LOW); Serial.println("turning off fan"); }); } } }); }); break; default: break; } }