ubuser пишет:
Окончательная версия вот:
//собирая в конструкторе выбирать : Количество настроек - 2 настройки. Глобальные переменные - 2 . В Des code option модуля вводить настройки значений температуры умноженными на 10 !!!
int32_t fpkt0 = 210; // значение термостата на старте (21 градус)
int32_t fpkt1 = 5; // значение гистерезиса на старте (0,5 градусов)
int32_t flag = 0; // параметр изменения состояния
void ICACHE_FLASH_ATTR
startfunc(){
digitalWrite(12,0); //установка состояния выхода 12 esp8266 на старте
valdes[0] = sensors_param.cfgdes[0];
valdes[1] = sensors_param.cfgdes[1];
}
void ICACHE_FLASH_ATTR
timerfunc(uint32_t timersrc){
if (sensors_param.cfgdes[0] != fpkt0){ valdes[0] = sensors_param.cfgdes[0];} else {
if (sensors_param.cfgdes[0] !=valdes[0]){ flag = 1; // проверка наличия изменений
sensors_param.cfgdes[0] = valdes[0];} //значения термостата по мктт (значения температуры умножены на 10)
}
fpkt0=sensors_param.cfgdes[0];
if (sensors_param.cfgdes[1] != fpkt1){ valdes[1] = sensors_param.cfgdes[1];} else { sensors_param.cfgdes[1] = valdes[1];} //значения гистерезиса по мктт (значения температуры умножены на 10)
fpkt1=sensors_param.cfgdes[1];
if (flag == 1) {SAVEOPT;
flag = 0;
}
if(data1wire[0]< (fpkt0 - fpkt1) ) digitalWrite(12,1); //нижняя граница термостата , включение гпио - значение уставки минус гестерезис
if(data1wire[0]> fpkt0 ) digitalWrite(12,0); //верхняя граница термостата , выключение гпио - значение уставки
}
void webfunc(char *pbuf) {
//отбражаем на главной состояние гпио
if(digitalRead(12)!=0) {
os_sprintf(HTTPBUFF," термостат - <b><font color=\"green\"> ON </font></b>," );
} else {
os_sprintf(HTTPBUFF," термостат - <b><font color=\"red\">OFF </font></b>," );
}
os_sprintf(HTTPBUFF," целевая <b>%s</b> ,", fltostr(valdes[0]));
os_sprintf(HTTPBUFF," гистерезис <b>%s</b> ", fltostr(valdes[1]));
}
Сохраняет настройки после перезагрузки модуля.
Чтобы код работал на последних версиях прошивки, надо вначале сделать так:
int32_t fpkt0 = 0; // значение термостата
int32_t fpkt1 = 0; // значение гистерезиса
Иначе после перезагрузки возможны глюки с обнулением значений термостата и гистерезиса.
Текущая версия:
//собирая в конструкторе выбирать : Количество настроек - 2 настройки. Глобальные переменные - 2 . В Des code option модуля вводить настройки значений температуры умноженными на 10 !!!
int32_t fpkt0 = 0; // значение термостата
int32_t fpkt1 = 0; // значение гистерезиса
int32_t flag = 0; // параметр изменения состояния
void ICACHE_FLASH_ATTR
startfunc(){
digitalWrite(12,0); //установка состояния выхода 12 esp8266 на старте
valdes[0] = sensors_param.cfgdes[0];
valdes[1] = sensors_param.cfgdes[1];
}
void ICACHE_FLASH_ATTR
timerfunc(uint32_t timersrc){
if (sensors_param.cfgdes[0] != fpkt0){ valdes[0] = sensors_param.cfgdes[0];} else {
if (sensors_param.cfgdes[0] !=valdes[0]){ flag = 1; // проверка наличия изменений
sensors_param.cfgdes[0] = valdes[0];} //значения термостата по мктт (значения температуры умножены на 10)
}
fpkt0=sensors_param.cfgdes[0];
if (sensors_param.cfgdes[1] != fpkt1){ valdes[1] = sensors_param.cfgdes[1];} else { sensors_param.cfgdes[1] = valdes[1];} //значения гистерезиса по мктт (значения температуры умножены на 10)
fpkt1=sensors_param.cfgdes[1];
if (flag == 1) {SAVEOPT;
flag = 0;
}
if(data1wire[0]< (fpkt0 - fpkt1) ) digitalWrite(12,1); //нижняя граница термостата , включение гпио - значение уставки минус гестерезис
if(data1wire[0]> fpkt0 ) digitalWrite(12,0); //верхняя граница термостата , выключение гпио - значение уставки
}
void webfunc(char *pbuf) {
//отбражаем на главной состояние гпио
if(digitalRead(12)!=0) {
os_sprintf(HTTPBUFF," термостат - <b><font color=\"green\"> ON </font></b>," );
} else {
os_sprintf(HTTPBUFF," термостат - <b><font color=\"red\">OFF </font></b>," );
}
os_sprintf(HTTPBUFF," целевая <b>%s</b> ,", fltostr(valdes[0]));
os_sprintf(HTTPBUFF," гистерезис <b>%s</b> ", fltostr(valdes[1]));
}