// // 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 = 60; 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(refreshperiod * percentOn / 100, []() { digitalWrite(HeizungPin, LOW); Serial.println("Turned off heating!"); }); mLuefterTicker.once((refreshperiod * percentOn / 100) + 30, []() { digitalWrite(LuefterPin, LOW); Serial.println("Turned off fan!"); }); }; func(); mHeizungTicker.attach(60, 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; } }