StateHandler: simple fan speed adjustment. pid() needs improvments

This commit is contained in:
Evgenii Meshcheriakov
2022-10-19 16:46:32 +03:00
parent 290c73f358
commit 0d70f8b464
3 changed files with 18 additions and 9 deletions

View File

@@ -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;