two modes if no humidity sensor available

This commit is contained in:
Lukas Heiligenbrunner 2020-11-17 15:26:17 +01:00
parent 92e7089aef
commit 4a7a929dbc
3 changed files with 78 additions and 39 deletions

View File

@ -5,46 +5,82 @@
#include "Heating.h" #include "Heating.h"
#include "Pins.h" #include "Pins.h"
void Heating::init(Temperature *tempsensor) { void Heating::init(Temperature *tempsensor, unsigned mode) {
mFanWaiting = false; switch (mode) {
case TIME: {
const unsigned percentOn = 20;
const unsigned refreshperiod = 60;
mHeizungTicker.attach(10, [&tempsensor, this]() { const auto func = [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(); mLuefterTicker.detach();
Serial.println("heating should run now!");
// turn on heating and fan // every minute turn on the heating
digitalWrite(LuefterPin, HIGH); digitalWrite(LuefterPin, HIGH);
digitalWrite(HeizungPin, HIGH); digitalWrite(HeizungPin, HIGH);
// if fan waiting detach its ticker Serial.println("Turning on heating");
if (mFanWaiting) {
mLuefterTicker.detach(); mTurnOffTicker.once(refreshperiod * percentOn / 100, []() {
mFanWaiting = false; digitalWrite(HeizungPin, LOW);
}
} else if (hum < 60.0) { Serial.println("Turned off heating!");
// if humidity too low turn off heating and fan after 60secs });
digitalWrite(HeizungPin, LOW);
Serial.println("heating should NOT run now!"); mLuefterTicker.once((refreshperiod * percentOn / 100) + 30, []() {
if (!mFanWaiting) { digitalWrite(LuefterPin, LOW);
mFanWaiting = true;
mLuefterTicker.once(60, []() { Serial.println("Turned off fan!");
// turn off fan });
digitalWrite(LuefterPin, LOW); };
Serial.println("turning 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;
}
} }

View File

@ -9,10 +9,13 @@
class Heating { class Heating {
public: public:
void init(Temperature* tempsensor); void init(Temperature* tempsensor, unsigned mode);
enum MODES {TIME, HUMIDITY};
private: private:
Ticker mHeizungTicker; Ticker mHeizungTicker;
Ticker mLuefterTicker; Ticker mLuefterTicker;
Ticker mTurnOffTicker;
bool mFanWaiting; bool mFanWaiting;
}; };

View File

@ -189,7 +189,7 @@ void setup() {
mang.init(&temp); mang.init(&temp);
Serial.println("initializing heating service"); Serial.println("initializing heating service");
mHeat.init(&temp); mHeat.init(&temp, Heating::TIME);
Serial.println("startup sequence complete!\n"); Serial.println("startup sequence complete!\n");
digitalWrite(LED_BUILTIN, HIGH); digitalWrite(LED_BUILTIN, HIGH);