StateHandler: stateAuto: fan speed control by changing pressure value. Without PID regulation.

This commit is contained in:
Evgenii Meshcheriakov 2022-10-18 17:43:13 +03:00
parent 4a414ea70f
commit 2de40ba7c0
3 changed files with 22 additions and 1 deletions

View File

@ -105,6 +105,7 @@ private:
void SetState (state_pointer newstate); void SetState (state_pointer newstate);
bool current_mode; bool current_mode;
Counter value[2] = { { 0, 100 }, { 0, 120 } }; Counter value[2] = { { 0, 100 }, { 0, 120 } };
Counter fan_speed = {80, 1000};
int saved_set_value[2] = { 0, 0 }; int saved_set_value[2] = { 0, 0 };
int saved_curr_value[2] = { 0, 0 }; int saved_curr_value[2] = { 0, 0 };
LiquidCrystal *_lcd; LiquidCrystal *_lcd;
@ -148,6 +149,11 @@ private:
* @param mode current mode * @param mode current mode
*/ */
void save (int eventValue, int counterValue, size_t mode); void save (int eventValue, int counterValue, size_t mode);
/** Calculates pid for fan control value
*
*/
void pid ();
}; };
#endif /* STATE_HANDLER_H_ */ #endif /* STATE_HANDLER_H_ */

View File

@ -104,6 +104,7 @@ StateHandler::stateManual (const Event &event)
{ {
case Event::eEnter: case Event::eEnter:
displaySet (saved_set_value[MANUAL], saved_curr_value[MANUAL]); displaySet (saved_set_value[MANUAL], saved_curr_value[MANUAL]);
this->A01->write(this->value[FAN_SPEED].getCurrent ());
break; break;
case Event::eExit: case Event::eExit:
_lcd->clear (); _lcd->clear ();
@ -133,6 +134,13 @@ StateHandler::stateAuto (const Event &event)
break; break;
case Event::eTick: case Event::eTick:
save (event.value, value[AUTO].getCurrent (), AUTO); save (event.value, value[AUTO].getCurrent (), AUTO);
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();
this->A01->write(fan_speed.getCurrent());
}
break; break;
} }
} }
@ -172,3 +180,10 @@ StateHandler::save (int eventValue, int counterValue, size_t mode)
displaySet (saved_set_value[mode], saved_curr_value[mode]); displaySet (saved_set_value[mode], saved_curr_value[mode]);
} }
} }
void StateHandler::pid () {
int integral = 0, error = 0;
error = saved_curr_value[AUTO] - saved_set_value[AUTO];
}

View File

@ -39,7 +39,7 @@ int PressureWrapper::getPressure() {
int16_t pressure = 0; int16_t pressure = 0;
if(!getRawPressure ()) { if(!getRawPressure ()) {
unsigned int i = 0; unsigned int i = 0;
while(i<7200000) i++; while(i<7200) i++;
getRawPressure (); getRawPressure ();
i = 0; i = 0;
} }