From 0d70f8b464694657fbe67133190b73fcc2ffef60 Mon Sep 17 00:00:00 2001 From: Evgenii Meshcheriakov Date: Wed, 19 Oct 2022 16:46:32 +0300 Subject: [PATCH] StateHandler: simple fan speed adjustment. pid() needs improvments --- StateHandler/inc/StateHandler.h | 2 +- StateHandler/src/StateHandler.cpp | 18 ++++++++++++++---- esp-vent-main/src/esp-vent-main.cpp | 7 +++---- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/StateHandler/inc/StateHandler.h b/StateHandler/inc/StateHandler.h index 9c17622..50e2a9c 100644 --- a/StateHandler/inc/StateHandler.h +++ b/StateHandler/inc/StateHandler.h @@ -109,7 +109,7 @@ private: * weigh of fan, so voltage within range of 0-89 is not * sufficient to start motor. * TODO: Value 89 should be scaled to 0 at some point */ - Counter fan_speed = {89, 1000}; + Counter fan_speed = {20, 1000}; /*integral controller for PID. should be global, since it * accumulates error signals encountered since startup*/ int integral = 0; diff --git a/StateHandler/src/StateHandler.cpp b/StateHandler/src/StateHandler.cpp index 7ff451f..9fc2258 100644 --- a/StateHandler/src/StateHandler.cpp +++ b/StateHandler/src/StateHandler.cpp @@ -134,8 +134,18 @@ StateHandler::stateAuto (const Event &event) break; case Event::eTick: save (event.value, value[AUTO].getCurrent (), AUTO); - pid(); - this->A01->write(fan_speed.getCurrent()); + int i = 0; +// pid(); +// this->A01->write(fan_speed.getCurrent()); + if(saved_curr_value[AUTO] < saved_set_value[AUTO]) { + fan_speed.inc(); + this->A01->write(fan_speed.getCurrent()); + } else if(saved_curr_value[AUTO] > saved_set_value[AUTO]){ + fan_speed.dec(); + while(i<720) i++; + i = 0; + this->A01->write(fan_speed.getCurrent()); + } break; } } @@ -177,9 +187,9 @@ StateHandler::save (int eventValue, int counterValue, size_t mode) } void StateHandler::pid () { - float kP = 0.7, kI = 0.7, kD = 0.7; + float kP = 0.001, kI = 0.001, kD = 0.001; int error = 0, last_error = 0, derivative = 0; - error = saved_curr_value[AUTO] - saved_set_value[AUTO]; + error = saved_set_value[AUTO] - saved_curr_value[AUTO]; last_error = error; integral += error; derivative = error - last_error; diff --git a/esp-vent-main/src/esp-vent-main.cpp b/esp-vent-main/src/esp-vent-main.cpp index 5ebf321..be77b29 100644 --- a/esp-vent-main/src/esp-vent-main.cpp +++ b/esp-vent-main/src/esp-vent-main.cpp @@ -63,7 +63,8 @@ main (void) ModbusMaster fan(1); fan.begin(9600); ModbusRegister A01(&fan, 0); - ModbusRegister DI1(&fan, 4, false); +// ModbusRegister DI1(&fan, 4, false); + StateHandler ventMachine (&lcd, &A01); /** Common pins */ @@ -78,8 +79,6 @@ main (void) SwitchController sw_toggle (&b_toggle, &glob_time, &ventMachine, BUTTON_CONTROL_TOG_MODE); - - PressureWrapper sens; int pressure = 0, pressure_time = 0; @@ -93,7 +92,7 @@ main (void) * TODO: * - Update current pressure to eTick */ - if(pressure_time == 80) { + if(pressure_time == 5) { pressure = sens.getPressure(); pressure_time = 0; }