mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-21 17:56:31 +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 : ""));
|
(XdrvMailbox.data_len >= 0 ? XdrvMailbox.data : ""));
|
||||||
*/
|
*/
|
||||||
if (XdrvMailbox.index >=0 && XdrvMailbox.index < TIMEPROP_NUM_OUTPUTS) {
|
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);
|
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) {
|
void CmndSetPv(void) {
|
||||||
Pid.last_pv_update_secs = Pid.current_time_secs;
|
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
|
// also trigger running the pid algorithm if we have been told to run it each pv sample
|
||||||
if (Pid.update_secs == 0) {
|
if (Pid.update_secs == 0) {
|
||||||
// this runs it at the next second
|
// this runs it at the next second
|
||||||
Pid.run_pid_now = true;
|
Pid.run_pid_now = true;
|
||||||
}
|
}
|
||||||
ResponseCmndFloat(atof(XdrvMailbox.data), 1);
|
ResponseCmndFloat(Pid.pid.getPv(), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CmndSetSp(void) {
|
void CmndSetSp(void) {
|
||||||
Pid.pid.setSp(atof(XdrvMailbox.data));
|
if (XdrvMailbox.data_len > 0) {
|
||||||
ResponseCmndFloat(atof(XdrvMailbox.data), 1);
|
Pid.pid.setSp(CharToFloat(XdrvMailbox.data));
|
||||||
|
}
|
||||||
|
ResponseCmndFloat(Pid.pid.getSp(), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CmndSetPb(void) {
|
void CmndSetPb(void) {
|
||||||
Pid.pid.setPb(atof(XdrvMailbox.data));
|
if (XdrvMailbox.data_len > 0) {
|
||||||
ResponseCmndFloat(atof(XdrvMailbox.data), 1);
|
Pid.pid.setPb(CharToFloat(XdrvMailbox.data));
|
||||||
|
}
|
||||||
|
ResponseCmndFloat(Pid.pid.getPb(), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CmndSetTi(void) {
|
void CmndSetTi(void) {
|
||||||
Pid.pid.setTi(atof(XdrvMailbox.data));
|
if (XdrvMailbox.data_len > 0) {
|
||||||
ResponseCmndFloat(atof(XdrvMailbox.data), 1);
|
Pid.pid.setTi(CharToFloat(XdrvMailbox.data));
|
||||||
|
}
|
||||||
|
ResponseCmndFloat(Pid.pid.getTi(), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CmndSetTd(void) {
|
void CmndSetTd(void) {
|
||||||
Pid.pid.setTd(atof(XdrvMailbox.data));
|
if (XdrvMailbox.data_len > 0) {
|
||||||
ResponseCmndFloat(atof(XdrvMailbox.data), 1);
|
Pid.pid.setTd(CharToFloat(XdrvMailbox.data));
|
||||||
|
}
|
||||||
|
ResponseCmndFloat(Pid.pid.getTd(), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CmndSetInitialInt(void) {
|
void CmndSetInitialInt(void) {
|
||||||
Pid.pid.setInitialInt(atof(XdrvMailbox.data));
|
if (XdrvMailbox.data_len > 0) {
|
||||||
ResponseCmndNumber(atof(XdrvMailbox.data));
|
Pid.pid.setInitialInt(CharToFloat(XdrvMailbox.data));
|
||||||
|
}
|
||||||
|
ResponseCmndNumber(Pid.pid.getInitialInt());
|
||||||
}
|
}
|
||||||
|
|
||||||
void CmndSetDSmooth(void) {
|
void CmndSetDSmooth(void) {
|
||||||
Pid.pid.setDSmooth(atof(XdrvMailbox.data));
|
if (XdrvMailbox.data_len > 0) {
|
||||||
ResponseCmndFloat(atof(XdrvMailbox.data), 1);
|
Pid.pid.setDSmooth(CharToFloat(XdrvMailbox.data));
|
||||||
|
}
|
||||||
|
ResponseCmndFloat(Pid.pid.getDSmooth(), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CmndSetAuto(void) {
|
void CmndSetAuto(void) {
|
||||||
Pid.pid.setAuto(atoi(XdrvMailbox.data));
|
if (XdrvMailbox.payload >= 0) {
|
||||||
ResponseCmndNumber(atoi(XdrvMailbox.data));
|
Pid.pid.setAuto(XdrvMailbox.payload);
|
||||||
|
}
|
||||||
|
ResponseCmndNumber(Pid.pid.getAuto());
|
||||||
}
|
}
|
||||||
|
|
||||||
void CmndSetManualPower(void) {
|
void CmndSetManualPower(void) {
|
||||||
Pid.pid.setManualPower(atof(XdrvMailbox.data));
|
if (XdrvMailbox.data_len > 0) {
|
||||||
ResponseCmndFloat(atof(XdrvMailbox.data), 1);
|
Pid.pid.setManualPower(CharToFloat(XdrvMailbox.data));
|
||||||
|
}
|
||||||
|
ResponseCmndFloat(Pid.pid.getManualPower(), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CmndSetMaxInterval(void) {
|
void CmndSetMaxInterval(void) {
|
||||||
Pid.pid.setMaxInterval(atoi(XdrvMailbox.data));
|
if (XdrvMailbox.payload >= 0) {
|
||||||
ResponseCmndNumber(atoi(XdrvMailbox.data));
|
Pid.pid.setMaxInterval(XdrvMailbox.payload);
|
||||||
|
}
|
||||||
|
ResponseCmndNumber(Pid.pid.getMaxInterval());
|
||||||
}
|
}
|
||||||
|
|
||||||
// case CMND_PID_SETUPDATE_SECS:
|
// case CMND_PID_SETUPDATE_SECS:
|
||||||
@ -325,9 +345,12 @@ void CmndSetMaxInterval(void) {
|
|||||||
// if (Pid.update_secs < 0)
|
// if (Pid.update_secs < 0)
|
||||||
// Pid.update_secs = 0;
|
// Pid.update_secs = 0;
|
||||||
void CmndSetUpdateSecs(void) {
|
void CmndSetUpdateSecs(void) {
|
||||||
Pid.update_secs = (atoi(XdrvMailbox.data));
|
if (XdrvMailbox.payload >= 0) {
|
||||||
if (Pid.update_secs < 0)
|
Pid.update_secs = (XdrvMailbox.payload);
|
||||||
|
}
|
||||||
|
if (Pid.update_secs < 0) {
|
||||||
Pid.update_secs = 0;
|
Pid.update_secs = 0;
|
||||||
|
}
|
||||||
ResponseCmndNumber(Pid.update_secs);
|
ResponseCmndNumber(Pid.update_secs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,7 +91,7 @@ void SevensegLog(void)
|
|||||||
if (strchr( value_level2, '.') == NULL) {
|
if (strchr( value_level2, '.') == NULL) {
|
||||||
sevenseg[unit]->print(atoi(value_level2), DEC);
|
sevenseg[unit]->print(atoi(value_level2), DEC);
|
||||||
} else {
|
} else {
|
||||||
sevenseg[unit]->printFloat(atof(value_level2), 1, DEC);
|
sevenseg[unit]->printFloat(CharToFloat(value_level2), 1, DEC);
|
||||||
}
|
}
|
||||||
sevenseg[unit]->writeDisplay();
|
sevenseg[unit]->writeDisplay();
|
||||||
unit++;
|
unit++;
|
||||||
@ -266,7 +266,7 @@ void SevensegDrawStringAt(uint16_t x, uint16_t y, char *str, uint16_t color, uin
|
|||||||
hasnumber= true;
|
hasnumber= true;
|
||||||
if (outnumtype == FLOAT) {
|
if (outnumtype == FLOAT) {
|
||||||
// Floating point number is given
|
// Floating point number is given
|
||||||
numberf = atof(str+i);
|
numberf = CharToFloat(str+i);
|
||||||
// Find number of fractional digits
|
// Find number of fractional digits
|
||||||
buf= str+i;
|
buf= str+i;
|
||||||
char *cp= strchr(buf, '.');
|
char *cp= strchr(buf, '.');
|
||||||
|
@ -351,7 +351,7 @@ bool CmndTM1637Number(bool clear)
|
|||||||
position = atoi(sPosition);
|
position = atoi(sPosition);
|
||||||
case 1:
|
case 1:
|
||||||
subStr(sNum, XdrvMailbox.data, ",", 1);
|
subStr(sNum, XdrvMailbox.data, ",", 1);
|
||||||
num = atof(sNum);
|
num = CharToFloat(sNum);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((position < 0) || (position > (Settings->display_width - 1)))
|
if ((position < 0) || (position > (Settings->display_width - 1)))
|
||||||
@ -450,7 +450,7 @@ bool CmndTM1637Float(bool clear)
|
|||||||
position = atoi(sPosition);
|
position = atoi(sPosition);
|
||||||
case 1:
|
case 1:
|
||||||
subStr(sNum, XdrvMailbox.data, ",", 1);
|
subStr(sNum, XdrvMailbox.data, ",", 1);
|
||||||
fnum = atof(sNum);
|
fnum = CharToFloat(sNum);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((position < 0) || (position > (Settings->display_width - 1)))
|
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;
|
bool query = strlen(XdrvMailbox.data) == 0;
|
||||||
if (!query)
|
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);
|
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;
|
bool query = strlen(XdrvMailbox.data) == 0;
|
||||||
if (!query)
|
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);
|
ResponseCmndFloat(sns_ot_boiler_status.m_hotWaterSetpoint, Settings->flag2.temperature_resolution);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user