mirror of
https://github.com/arendst/Tasmota.git
synced 2025-04-25 15:27:17 +00:00
Fix PID-Control parameter destruction
Fix PID-Control parameter destruction and replace all atof() by CharToFloat() saving 8k code size (#17618)
This commit is contained in:
parent
33d6dbed3d
commit
af733afbe5
@ -205,7 +205,7 @@ bool TimepropCommand()
|
||||
(XdrvMailbox.data_len >= 0 ? XdrvMailbox.data : ""));
|
||||
*/
|
||||
if (XdrvMailbox.index >=0 && XdrvMailbox.index < TIMEPROP_NUM_OUTPUTS) {
|
||||
timeprops[XdrvMailbox.index].setPower( atof(XdrvMailbox.data), Tprop.current_time_secs );
|
||||
timeprops[XdrvMailbox.index].setPower( CharToFloat(XdrvMailbox.data), Tprop.current_time_secs );
|
||||
}
|
||||
Response_P(PSTR("{\"" D_CMND_TIMEPROP D_CMND_TIMEPROP_SETPOWER "%d\":\"%s\"}"), XdrvMailbox.index, XdrvMailbox.data);
|
||||
}
|
||||
|
@ -266,58 +266,78 @@ void PIDShowSensor() {
|
||||
|
||||
void CmndSetPv(void) {
|
||||
Pid.last_pv_update_secs = Pid.current_time_secs;
|
||||
Pid.pid.setPv(atof(XdrvMailbox.data), Pid.last_pv_update_secs);
|
||||
if (XdrvMailbox.data_len > 0) {
|
||||
Pid.pid.setPv(CharToFloat(XdrvMailbox.data), Pid.last_pv_update_secs);
|
||||
}
|
||||
// also trigger running the pid algorithm if we have been told to run it each pv sample
|
||||
if (Pid.update_secs == 0) {
|
||||
// this runs it at the next second
|
||||
Pid.run_pid_now = true;
|
||||
}
|
||||
ResponseCmndFloat(atof(XdrvMailbox.data), 1);
|
||||
ResponseCmndFloat(Pid.pid.getPv(), 1);
|
||||
}
|
||||
|
||||
void CmndSetSp(void) {
|
||||
Pid.pid.setSp(atof(XdrvMailbox.data));
|
||||
ResponseCmndFloat(atof(XdrvMailbox.data), 1);
|
||||
if (XdrvMailbox.data_len > 0) {
|
||||
Pid.pid.setSp(CharToFloat(XdrvMailbox.data));
|
||||
}
|
||||
ResponseCmndFloat(Pid.pid.getSp(), 1);
|
||||
}
|
||||
|
||||
void CmndSetPb(void) {
|
||||
Pid.pid.setPb(atof(XdrvMailbox.data));
|
||||
ResponseCmndFloat(atof(XdrvMailbox.data), 1);
|
||||
if (XdrvMailbox.data_len > 0) {
|
||||
Pid.pid.setPb(CharToFloat(XdrvMailbox.data));
|
||||
}
|
||||
ResponseCmndFloat(Pid.pid.getPb(), 1);
|
||||
}
|
||||
|
||||
void CmndSetTi(void) {
|
||||
Pid.pid.setTi(atof(XdrvMailbox.data));
|
||||
ResponseCmndFloat(atof(XdrvMailbox.data), 1);
|
||||
if (XdrvMailbox.data_len > 0) {
|
||||
Pid.pid.setTi(CharToFloat(XdrvMailbox.data));
|
||||
}
|
||||
ResponseCmndFloat(Pid.pid.getTi(), 1);
|
||||
}
|
||||
|
||||
void CmndSetTd(void) {
|
||||
Pid.pid.setTd(atof(XdrvMailbox.data));
|
||||
ResponseCmndFloat(atof(XdrvMailbox.data), 1);
|
||||
if (XdrvMailbox.data_len > 0) {
|
||||
Pid.pid.setTd(CharToFloat(XdrvMailbox.data));
|
||||
}
|
||||
ResponseCmndFloat(Pid.pid.getTd(), 1);
|
||||
}
|
||||
|
||||
void CmndSetInitialInt(void) {
|
||||
Pid.pid.setInitialInt(atof(XdrvMailbox.data));
|
||||
ResponseCmndNumber(atof(XdrvMailbox.data));
|
||||
if (XdrvMailbox.data_len > 0) {
|
||||
Pid.pid.setInitialInt(CharToFloat(XdrvMailbox.data));
|
||||
}
|
||||
ResponseCmndNumber(Pid.pid.getInitialInt());
|
||||
}
|
||||
|
||||
void CmndSetDSmooth(void) {
|
||||
Pid.pid.setDSmooth(atof(XdrvMailbox.data));
|
||||
ResponseCmndFloat(atof(XdrvMailbox.data), 1);
|
||||
if (XdrvMailbox.data_len > 0) {
|
||||
Pid.pid.setDSmooth(CharToFloat(XdrvMailbox.data));
|
||||
}
|
||||
ResponseCmndFloat(Pid.pid.getDSmooth(), 1);
|
||||
}
|
||||
|
||||
void CmndSetAuto(void) {
|
||||
Pid.pid.setAuto(atoi(XdrvMailbox.data));
|
||||
ResponseCmndNumber(atoi(XdrvMailbox.data));
|
||||
if (XdrvMailbox.payload >= 0) {
|
||||
Pid.pid.setAuto(XdrvMailbox.payload);
|
||||
}
|
||||
ResponseCmndNumber(Pid.pid.getAuto());
|
||||
}
|
||||
|
||||
void CmndSetManualPower(void) {
|
||||
Pid.pid.setManualPower(atof(XdrvMailbox.data));
|
||||
ResponseCmndFloat(atof(XdrvMailbox.data), 1);
|
||||
if (XdrvMailbox.data_len > 0) {
|
||||
Pid.pid.setManualPower(CharToFloat(XdrvMailbox.data));
|
||||
}
|
||||
ResponseCmndFloat(Pid.pid.getManualPower(), 1);
|
||||
}
|
||||
|
||||
void CmndSetMaxInterval(void) {
|
||||
Pid.pid.setMaxInterval(atoi(XdrvMailbox.data));
|
||||
ResponseCmndNumber(atoi(XdrvMailbox.data));
|
||||
if (XdrvMailbox.payload >= 0) {
|
||||
Pid.pid.setMaxInterval(XdrvMailbox.payload);
|
||||
}
|
||||
ResponseCmndNumber(Pid.pid.getMaxInterval());
|
||||
}
|
||||
|
||||
// case CMND_PID_SETUPDATE_SECS:
|
||||
@ -325,9 +345,12 @@ void CmndSetMaxInterval(void) {
|
||||
// if (Pid.update_secs < 0)
|
||||
// Pid.update_secs = 0;
|
||||
void CmndSetUpdateSecs(void) {
|
||||
Pid.update_secs = (atoi(XdrvMailbox.data));
|
||||
if (Pid.update_secs < 0)
|
||||
if (XdrvMailbox.payload >= 0) {
|
||||
Pid.update_secs = (XdrvMailbox.payload);
|
||||
}
|
||||
if (Pid.update_secs < 0) {
|
||||
Pid.update_secs = 0;
|
||||
}
|
||||
ResponseCmndNumber(Pid.update_secs);
|
||||
}
|
||||
|
||||
|
@ -91,7 +91,7 @@ void SevensegLog(void)
|
||||
if (strchr( value_level2, '.') == NULL) {
|
||||
sevenseg[unit]->print(atoi(value_level2), DEC);
|
||||
} else {
|
||||
sevenseg[unit]->printFloat(atof(value_level2), 1, DEC);
|
||||
sevenseg[unit]->printFloat(CharToFloat(value_level2), 1, DEC);
|
||||
}
|
||||
sevenseg[unit]->writeDisplay();
|
||||
unit++;
|
||||
@ -266,7 +266,7 @@ void SevensegDrawStringAt(uint16_t x, uint16_t y, char *str, uint16_t color, uin
|
||||
hasnumber= true;
|
||||
if (outnumtype == FLOAT) {
|
||||
// Floating point number is given
|
||||
numberf = atof(str+i);
|
||||
numberf = CharToFloat(str+i);
|
||||
// Find number of fractional digits
|
||||
buf= str+i;
|
||||
char *cp= strchr(buf, '.');
|
||||
|
@ -351,7 +351,7 @@ bool CmndTM1637Number(bool clear)
|
||||
position = atoi(sPosition);
|
||||
case 1:
|
||||
subStr(sNum, XdrvMailbox.data, ",", 1);
|
||||
num = atof(sNum);
|
||||
num = CharToFloat(sNum);
|
||||
}
|
||||
|
||||
if ((position < 0) || (position > (Settings->display_width - 1)))
|
||||
@ -450,7 +450,7 @@ bool CmndTM1637Float(bool clear)
|
||||
position = atoi(sPosition);
|
||||
case 1:
|
||||
subStr(sNum, XdrvMailbox.data, ",", 1);
|
||||
fnum = atof(sNum);
|
||||
fnum = CharToFloat(sNum);
|
||||
}
|
||||
|
||||
if ((position < 0) || (position > (Settings->display_width - 1)))
|
||||
|
@ -500,7 +500,7 @@ void sns_opentherm_boiler_setpoint_cmd(void)
|
||||
bool query = strlen(XdrvMailbox.data) == 0;
|
||||
if (!query)
|
||||
{
|
||||
sns_ot_boiler_status.m_boilerSetpoint = atof(XdrvMailbox.data);
|
||||
sns_ot_boiler_status.m_boilerSetpoint = CharToFloat(XdrvMailbox.data);
|
||||
}
|
||||
ResponseCmndFloat(sns_ot_boiler_status.m_boilerSetpoint, Settings->flag2.temperature_resolution);
|
||||
}
|
||||
@ -510,7 +510,7 @@ void sns_opentherm_hot_water_setpoint_cmd(void)
|
||||
bool query = strlen(XdrvMailbox.data) == 0;
|
||||
if (!query)
|
||||
{
|
||||
sns_ot_boiler_status.m_hotWaterSetpoint = atof(XdrvMailbox.data);
|
||||
sns_ot_boiler_status.m_hotWaterSetpoint = CharToFloat(XdrvMailbox.data);
|
||||
}
|
||||
ResponseCmndFloat(sns_ot_boiler_status.m_hotWaterSetpoint, Settings->flag2.temperature_resolution);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user