STM32F103C8T6_WIFI_Heating_system

Dependencies:   mbed mbed-STM32F103C8T6 eeprom_flash Watchdog PinDetect DS1820

  1. Bluepill STM32F103C8T6 Heating system
    1. _This project is core part of bigger heating system project!_

Features - Reading temperature from four DS18B20 sensors - Making a decision about switching on/off heater and pomp - Executing simple user commands from UART - Storing state parameters to program memory (EEPROM emulation)

Committer:
andrewklmn
Date:
Sun Sep 23 16:42:17 2018 +0000
Revision:
46:0d60fbcfb245
Parent:
45:abc682827659
Child:
48:4ec055c066b4
eco simulator added

Who changed what in which revision?

UserRevisionLine numberNew contents of line
andrewklmn 38:a0753c2a4497 1 #include "temp_controller.h"
andrewklmn 38:a0753c2a4497 2
andrewklmn 38:a0753c2a4497 3 extern Serial pc;
andrewklmn 38:a0753c2a4497 4 extern Watchdog wd;
andrewklmn 38:a0753c2a4497 5 extern DigitalOut myled;
andrewklmn 39:aa5f95061409 6 extern DigitalOut pomp_OFF;
andrewklmn 39:aa5f95061409 7 extern DigitalOut heater_OFF;
andrewklmn 39:aa5f95061409 8
andrewklmn 38:a0753c2a4497 9 extern unsigned int eeprom_config_value;
andrewklmn 38:a0753c2a4497 10
andrewklmn 38:a0753c2a4497 11 #define MIN_MEBEL_TEMP 15
andrewklmn 38:a0753c2a4497 12 #define MIN_LITOS_TEMP 10
andrewklmn 38:a0753c2a4497 13 #define MIN_BACK_WATER_TEMP 10
andrewklmn 38:a0753c2a4497 14 #define MAX_HOT_WATER_TEMP 35
andrewklmn 38:a0753c2a4497 15
andrewklmn 38:a0753c2a4497 16 //unsigned int epprom_config_value = 0x0F0A0A23;
andrewklmn 38:a0753c2a4497 17 /*
andrewklmn 38:a0753c2a4497 18 epprom_config_value:
andrewklmn 38:a0753c2a4497 19 1 unsigned char - Min mebel temp (default +15)
andrewklmn 38:a0753c2a4497 20 2 unsigned char Min litos temp (default +10)
andrewklmn 38:a0753c2a4497 21 3 unsigned char Min back water temp (default +10)
andrewklmn 38:a0753c2a4497 22 4 unsigned char Max hot water temp (default +35)
andrewklmn 38:a0753c2a4497 23 */
andrewklmn 38:a0753c2a4497 24
andrewklmn 38:a0753c2a4497 25 float temp[5] = {
andrewklmn 39:aa5f95061409 26 // initial temperature is maximum
andrewklmn 39:aa5f95061409 27 85, // OUTDOOR
andrewklmn 39:aa5f95061409 28 85, // LITOS
andrewklmn 39:aa5f95061409 29 85, // MEBEL
andrewklmn 39:aa5f95061409 30 85, // HOT WATER
andrewklmn 39:aa5f95061409 31 85 // BACK WATER
andrewklmn 39:aa5f95061409 32 };
andrewklmn 39:aa5f95061409 33
andrewklmn 39:aa5f95061409 34 float simulated_temp[5] = {
andrewklmn 39:aa5f95061409 35 // initial temperature for simulator
andrewklmn 39:aa5f95061409 36 7, // OUTDOOR
andrewklmn 39:aa5f95061409 37 10, // LITOS
andrewklmn 39:aa5f95061409 38 14, // MEBEL
andrewklmn 39:aa5f95061409 39 33, // HOT WATER
andrewklmn 39:aa5f95061409 40 18 // BACK WATER
andrewklmn 38:a0753c2a4497 41 };
andrewklmn 38:a0753c2a4497 42
andrewklmn 38:a0753c2a4497 43 int temp_error[5] = {
andrewklmn 39:aa5f95061409 44 1,1,1,1,1 // initial state is no sensors
andrewklmn 39:aa5f95061409 45 // 0 - sensor present
andrewklmn 39:aa5f95061409 46 // 1 - no sensor
andrewklmn 39:aa5f95061409 47 // 2 - sensor CRC error
andrewklmn 39:aa5f95061409 48 };
andrewklmn 38:a0753c2a4497 49
andrewklmn 38:a0753c2a4497 50 string labels[5] = {
andrewklmn 38:a0753c2a4497 51 "OUTDOOR",
andrewklmn 38:a0753c2a4497 52 "LITOS",
andrewklmn 38:a0753c2a4497 53 "MEBEL",
andrewklmn 38:a0753c2a4497 54 "HOT WATER",
andrewklmn 38:a0753c2a4497 55 "BACK WATER"
andrewklmn 38:a0753c2a4497 56 };
andrewklmn 38:a0753c2a4497 57
andrewklmn 38:a0753c2a4497 58 DS1820 ds1820[5] = {
andrewklmn 39:aa5f95061409 59 DS1820(PA_9), // substitute PA_9 with actual mbed pin name connected to the OUTDOOR
andrewklmn 39:aa5f95061409 60 DS1820(PA_8), // substitute PA_8 with actual mbed pin name connected to the INDOOR LITOS
andrewklmn 39:aa5f95061409 61 DS1820(PA_7), // substitute PA_7 with actual mbed pin name connected to the INDOOR MEBEL
andrewklmn 39:aa5f95061409 62 DS1820(PA_6), // substitute PA_6 with actual mbed pin name connected to the HOT WATER
andrewklmn 39:aa5f95061409 63 DS1820(PA_5) // substitute PA_6 with actual mbed pin name connected to the HOT WATER
andrewklmn 39:aa5f95061409 64 };
andrewklmn 38:a0753c2a4497 65
andrewklmn 39:aa5f95061409 66 unsigned char working_mode = 1; // default mode after powerup is ECO
andrewklmn 39:aa5f95061409 67 // 0 - OFF - heating off, pomp and heater are OFF
andrewklmn 39:aa5f95061409 68 // 1 - ECO - eco heating
andrewklmn 39:aa5f95061409 69 // 2 - STANDART - standart heating
andrewklmn 39:aa5f95061409 70 // 3 - SIMULATOR - simulator mode - work on simulated_temp
andrewklmn 39:aa5f95061409 71 // 4 - POMP - pomp is ON, heater is OFF
andrewklmn 39:aa5f95061409 72 // 5 - FULL - pomp and heater are ON
andrewklmn 38:a0753c2a4497 73
andrewklmn 38:a0753c2a4497 74 void start_temp(){
andrewklmn 38:a0753c2a4497 75
andrewklmn 38:a0753c2a4497 76 __disable_irq();
andrewklmn 38:a0753c2a4497 77
andrewklmn 38:a0753c2a4497 78 for ( int j=0; j < 5; j++ ) {
andrewklmn 38:a0753c2a4497 79 if(ds1820[j].begin()) {
andrewklmn 38:a0753c2a4497 80 ds1820[j].startConversion();
andrewklmn 39:aa5f95061409 81 //pc.printf("%s sensor present!\r\n", labels[j].c_str());
andrewklmn 39:aa5f95061409 82 };// else {
andrewklmn 39:aa5f95061409 83 //pc.printf("No %s sensor found!\r\n", labels[j].c_str());
andrewklmn 39:aa5f95061409 84 //};
andrewklmn 38:a0753c2a4497 85 };
andrewklmn 38:a0753c2a4497 86 __enable_irq();
andrewklmn 38:a0753c2a4497 87
andrewklmn 38:a0753c2a4497 88 };
andrewklmn 38:a0753c2a4497 89
andrewklmn 38:a0753c2a4497 90 void check_temp(){
andrewklmn 38:a0753c2a4497 91
andrewklmn 38:a0753c2a4497 92 myled = 0; // turn the LED on
andrewklmn 38:a0753c2a4497 93
andrewklmn 38:a0753c2a4497 94 // kick the watchdog
andrewklmn 38:a0753c2a4497 95 wd.Service();
andrewklmn 38:a0753c2a4497 96
andrewklmn 38:a0753c2a4497 97 __disable_irq();
andrewklmn 38:a0753c2a4497 98
andrewklmn 38:a0753c2a4497 99 for ( int j=0; j < 5; j++ ) {
andrewklmn 38:a0753c2a4497 100
andrewklmn 38:a0753c2a4497 101 temp_error[j] = ds1820[j].read(temp[j]); // read temperature from DS1820 and perform cyclic redundancy check (CRC)
andrewklmn 41:978c2d85a0e7 102 ds1820[j].startConversion(); // start temperature conversion from analog to digital before next reading
andrewklmn 39:aa5f95061409 103 };
andrewklmn 38:a0753c2a4497 104
andrewklmn 38:a0753c2a4497 105
andrewklmn 38:a0753c2a4497 106 // save new config if it was changed
andrewklmn 38:a0753c2a4497 107 if (readEEPROMWord(0)!= eeprom_config_value) {
andrewklmn 39:aa5f95061409 108 save_new_config();
andrewklmn 38:a0753c2a4497 109 };
andrewklmn 38:a0753c2a4497 110
andrewklmn 38:a0753c2a4497 111
andrewklmn 38:a0753c2a4497 112
andrewklmn 38:a0753c2a4497 113 __enable_irq();
andrewklmn 38:a0753c2a4497 114
andrewklmn 38:a0753c2a4497 115 myled = 1; // turn the LED off
andrewklmn 38:a0753c2a4497 116 };
andrewklmn 38:a0753c2a4497 117
andrewklmn 39:aa5f95061409 118
andrewklmn 39:aa5f95061409 119 void process_temp() {
andrewklmn 45:abc682827659 120
andrewklmn 46:0d60fbcfb245 121 //pc.printf("State %d|%d|%d|%d|%d\r\n", temp_error[0], temp_error[1], temp_error[2], temp_error[3], temp_error[4] );
andrewklmn 46:0d60fbcfb245 122 //pc.printf("Temp %3.1f|%3.1f|%3.1f|%3.1f|%3.1f\r\n", temp[0], temp[1], temp[2], temp[3], temp[4] );
andrewklmn 46:0d60fbcfb245 123 //pc.printf("RAM_config=%X, FLASH_config=%X\r\n", eeprom_config_value ,readEEPROMWord(0));
andrewklmn 46:0d60fbcfb245 124 //pc.printf("=======================================");
andrewklmn 46:0d60fbcfb245 125
andrewklmn 39:aa5f95061409 126 switch(working_mode) {
andrewklmn 39:aa5f95061409 127 case 0:
andrewklmn 39:aa5f95061409 128 // 0 - OFF - heating off, pomp and heater are OFF
andrewklmn 39:aa5f95061409 129 pomp_OFF = 1;
andrewklmn 39:aa5f95061409 130 heater_OFF = 1;
andrewklmn 39:aa5f95061409 131 break;
andrewklmn 39:aa5f95061409 132 case 1:
andrewklmn 39:aa5f95061409 133 // 1 - ECO - eco heating
andrewklmn 46:0d60fbcfb245 134 set_pomp_and_heater_eco_mode(temp);
andrewklmn 39:aa5f95061409 135 break;
andrewklmn 39:aa5f95061409 136 case 2:
andrewklmn 39:aa5f95061409 137 // 2 - STANDART - standart heating
andrewklmn 46:0d60fbcfb245 138 set_pomp_and_heater_by(temp);
andrewklmn 39:aa5f95061409 139 break;
andrewklmn 39:aa5f95061409 140 case 3:
andrewklmn 46:0d60fbcfb245 141 // 3 - ECO SIMULATOR - simulator mode - work on simulated_temp
andrewklmn 46:0d60fbcfb245 142 set_pomp_and_heater_eco_mode(simulated_temp);
andrewklmn 39:aa5f95061409 143 break;
andrewklmn 39:aa5f95061409 144 case 4:
andrewklmn 46:0d60fbcfb245 145 // 4 - SIMULATOR - simulator mode - work on simulated_temp
andrewklmn 46:0d60fbcfb245 146 set_pomp_and_heater_by(simulated_temp);
andrewklmn 46:0d60fbcfb245 147 break;
andrewklmn 46:0d60fbcfb245 148 case 5:
andrewklmn 46:0d60fbcfb245 149 // 5 - POMP - pomp is ON, heater is OFF
andrewklmn 40:6168609574d0 150 pomp_OFF = 0;
andrewklmn 39:aa5f95061409 151 heater_OFF = 1;
andrewklmn 39:aa5f95061409 152 break;
andrewklmn 46:0d60fbcfb245 153 case 6:
andrewklmn 46:0d60fbcfb245 154 // 6 - FULL - pomp and heater are ON
andrewklmn 41:978c2d85a0e7 155 pomp_OFF = 0;
andrewklmn 41:978c2d85a0e7 156 heater_OFF = 0;
andrewklmn 39:aa5f95061409 157 break;
andrewklmn 39:aa5f95061409 158 default:
andrewklmn 39:aa5f95061409 159 pomp_OFF = 1;
andrewklmn 39:aa5f95061409 160 heater_OFF = 1;
andrewklmn 39:aa5f95061409 161 };
andrewklmn 39:aa5f95061409 162
andrewklmn 39:aa5f95061409 163 };
andrewklmn 39:aa5f95061409 164
andrewklmn 39:aa5f95061409 165
andrewklmn 39:aa5f95061409 166 void save_new_config() {
andrewklmn 39:aa5f95061409 167
andrewklmn 39:aa5f95061409 168 enableEEPROMWriting();
andrewklmn 39:aa5f95061409 169 writeEEPROMWord(0,eeprom_config_value);
andrewklmn 39:aa5f95061409 170 disableEEPROMWriting();
andrewklmn 39:aa5f95061409 171
andrewklmn 39:aa5f95061409 172 };
andrewklmn 39:aa5f95061409 173
andrewklmn 39:aa5f95061409 174
andrewklmn 38:a0753c2a4497 175 unsigned int get_temp_config_value(){
andrewklmn 38:a0753c2a4497 176
andrewklmn 38:a0753c2a4497 177 unsigned int v = readEEPROMWord(0);
andrewklmn 38:a0753c2a4497 178 if ( v == 0xFFFFFFFF ) {
andrewklmn 38:a0753c2a4497 179 // if eeprom config value is not initialized
andrewklmn 38:a0753c2a4497 180 // set default value 0x0F0A0A23;
andrewklmn 38:a0753c2a4497 181 v = MIN_MEBEL_TEMP;
andrewklmn 38:a0753c2a4497 182 v = ( v << 8 ) | MIN_LITOS_TEMP;
andrewklmn 38:a0753c2a4497 183 v = ( v << 8 ) | MIN_BACK_WATER_TEMP;
andrewklmn 38:a0753c2a4497 184 v = ( v << 8 ) | MAX_HOT_WATER_TEMP;
andrewklmn 38:a0753c2a4497 185 };
andrewklmn 38:a0753c2a4497 186 return v;
andrewklmn 45:abc682827659 187 };
andrewklmn 45:abc682827659 188
andrewklmn 45:abc682827659 189 void set_pomp_and_heater_by(float * work_temp) {
andrewklmn 45:abc682827659 190 // temp config array = outdoor|litos|mebel|hot_water|back_water
andrewklmn 45:abc682827659 191
andrewklmn 45:abc682827659 192 /*
andrewklmn 45:abc682827659 193 eeprom_config_value:
andrewklmn 45:abc682827659 194 1 unsigned char - Min mebel temp (default +15)
andrewklmn 45:abc682827659 195 2 unsigned char Min litos temp (default +10)
andrewklmn 45:abc682827659 196 3 unsigned char Min back water temp (default +10)
andrewklmn 45:abc682827659 197 4 unsigned char Max hot water temp (default +35)
andrewklmn 45:abc682827659 198 */
andrewklmn 45:abc682827659 199 unsigned char min_mebel_temp = eeprom_config_value >> 24;
andrewklmn 45:abc682827659 200 unsigned char min_litos_temp = ( 0x00FF0000 & eeprom_config_value) >> 16;
andrewklmn 45:abc682827659 201 unsigned char min_back_water_temp = ( 0x0000FF00 & eeprom_config_value) >> 8;
andrewklmn 45:abc682827659 202 unsigned char max_hot_water_temp = 0x000000FF & eeprom_config_value;
andrewklmn 45:abc682827659 203
andrewklmn 45:abc682827659 204 //__disable_irq();
andrewklmn 45:abc682827659 205 //pc.printf("Level %d|%d|%d|%d\r\n", min_mebel_temp, min_litos_temp, min_back_water_temp, max_hot_water_temp);
andrewklmn 45:abc682827659 206 //__enable_irq();
andrewklmn 45:abc682827659 207
andrewklmn 45:abc682827659 208 float outdoor = *(work_temp);
andrewklmn 45:abc682827659 209 float litos = *(work_temp + 1);
andrewklmn 45:abc682827659 210 float mebel = *(work_temp + 2);
andrewklmn 45:abc682827659 211 float hot_water = *(work_temp + 3);
andrewklmn 45:abc682827659 212 float back_water = *(work_temp + 4);
andrewklmn 45:abc682827659 213
andrewklmn 45:abc682827659 214 if (outdoor > litos) {
andrewklmn 45:abc682827659 215 // ============================================= SUMMER MODE
andrewklmn 45:abc682827659 216 // system off
andrewklmn 45:abc682827659 217 pomp_OFF = 1;
andrewklmn 45:abc682827659 218 heater_OFF = 1;
andrewklmn 45:abc682827659 219
andrewklmn 45:abc682827659 220 } else if ( outdoor < 3) {
andrewklmn 45:abc682827659 221 // ============================================== WINTER MODE
andrewklmn 45:abc682827659 222 // pomp is always on
andrewklmn 45:abc682827659 223 pomp_OFF = 0;
andrewklmn 45:abc682827659 224
andrewklmn 45:abc682827659 225 if (mebel < min_mebel_temp ||
andrewklmn 45:abc682827659 226 litos < min_litos_temp ||
andrewklmn 45:abc682827659 227 back_water < min_back_water_temp) {
andrewklmn 45:abc682827659 228 // when if somewhere is colder than it must be
andrewklmn 45:abc682827659 229 if (hot_water > max_hot_water_temp) {
andrewklmn 45:abc682827659 230 heater_OFF = 1;
andrewklmn 45:abc682827659 231 } else {
andrewklmn 45:abc682827659 232 if ( heater_OFF == 1 ) {
andrewklmn 45:abc682827659 233 if (hot_water < (max_hot_water_temp - 10)) {
andrewklmn 45:abc682827659 234 heater_OFF = 0;
andrewklmn 45:abc682827659 235 } else {
andrewklmn 45:abc682827659 236 heater_OFF = 1;
andrewklmn 45:abc682827659 237 };
andrewklmn 45:abc682827659 238 } else {
andrewklmn 45:abc682827659 239 heater_OFF = 0;
andrewklmn 45:abc682827659 240 };
andrewklmn 45:abc682827659 241 };
andrewklmn 45:abc682827659 242 } else {
andrewklmn 45:abc682827659 243 heater_OFF = 1;
andrewklmn 45:abc682827659 244 };
andrewklmn 45:abc682827659 245
andrewklmn 45:abc682827659 246 } else {
andrewklmn 45:abc682827659 247 // ======================================== DEMI SEASON MODE
andrewklmn 45:abc682827659 248
andrewklmn 45:abc682827659 249 if (mebel < min_mebel_temp ||
andrewklmn 45:abc682827659 250 litos < min_litos_temp ||
andrewklmn 45:abc682827659 251 back_water < min_back_water_temp) {
andrewklmn 45:abc682827659 252 // when if somewhere is colder than it must be
andrewklmn 45:abc682827659 253 pomp_OFF = 0;
andrewklmn 45:abc682827659 254 if ( hot_water > (max_hot_water_temp-10) ) {
andrewklmn 45:abc682827659 255 heater_OFF = 1;
andrewklmn 45:abc682827659 256 } else {
andrewklmn 45:abc682827659 257 if ( heater_OFF == 1 ) {
andrewklmn 45:abc682827659 258 if ( hot_water < (min_back_water_temp + 2) ) {
andrewklmn 45:abc682827659 259 heater_OFF = 0;
andrewklmn 45:abc682827659 260 } else {
andrewklmn 45:abc682827659 261 heater_OFF = 1;
andrewklmn 45:abc682827659 262 };
andrewklmn 45:abc682827659 263 } else {
andrewklmn 45:abc682827659 264 heater_OFF = 0;
andrewklmn 45:abc682827659 265 };
andrewklmn 45:abc682827659 266 };
andrewklmn 45:abc682827659 267 } else {
andrewklmn 45:abc682827659 268 heater_OFF = 1;
andrewklmn 45:abc682827659 269 if ( hot_water > min_back_water_temp ) {
andrewklmn 45:abc682827659 270 pomp_OFF = 0;
andrewklmn 45:abc682827659 271 } else {
andrewklmn 45:abc682827659 272 pomp_OFF = 1;
andrewklmn 45:abc682827659 273 };
andrewklmn 45:abc682827659 274 };
andrewklmn 45:abc682827659 275 };
andrewklmn 45:abc682827659 276
andrewklmn 45:abc682827659 277 //__disable_irq();
andrewklmn 45:abc682827659 278 //pc.printf("Temp %3.1f|%3.1f|%3.1f|%3.1f|%3.1f\r\n", *(work_temp), *(work_temp + 1), *(work_temp + 2), *(work_temp + 3), *(work_temp + 4) );
andrewklmn 45:abc682827659 279 //__enable_irq();
andrewklmn 46:0d60fbcfb245 280 };
andrewklmn 46:0d60fbcfb245 281
andrewklmn 46:0d60fbcfb245 282 void set_pomp_and_heater_eco_mode(float * work_temp){
andrewklmn 46:0d60fbcfb245 283
andrewklmn 46:0d60fbcfb245 284 unsigned char min_mebel_temp = 10;
andrewklmn 46:0d60fbcfb245 285 unsigned char min_litos_temp = 7;
andrewklmn 46:0d60fbcfb245 286 unsigned char min_back_water_temp = 7;
andrewklmn 46:0d60fbcfb245 287 unsigned char max_hot_water_temp = 25;
andrewklmn 46:0d60fbcfb245 288
andrewklmn 46:0d60fbcfb245 289 float outdoor = *(work_temp);
andrewklmn 46:0d60fbcfb245 290 float litos = *(work_temp + 1);
andrewklmn 46:0d60fbcfb245 291 float mebel = *(work_temp + 2);
andrewklmn 46:0d60fbcfb245 292 float hot_water = *(work_temp + 3);
andrewklmn 46:0d60fbcfb245 293 float back_water = *(work_temp + 4);
andrewklmn 46:0d60fbcfb245 294
andrewklmn 46:0d60fbcfb245 295 if (outdoor > litos) {
andrewklmn 46:0d60fbcfb245 296 //============================================ summer mode
andrewklmn 46:0d60fbcfb245 297 // system off
andrewklmn 46:0d60fbcfb245 298 pomp_OFF = 1;
andrewklmn 46:0d60fbcfb245 299 heater_OFF = 1;
andrewklmn 46:0d60fbcfb245 300
andrewklmn 46:0d60fbcfb245 301 } else if (outdoor < 3) {
andrewklmn 46:0d60fbcfb245 302 //============================================ winter mode
andrewklmn 46:0d60fbcfb245 303 pomp_OFF = 0;
andrewklmn 46:0d60fbcfb245 304 if (mebel < min_mebel_temp ||
andrewklmn 46:0d60fbcfb245 305 litos < min_litos_temp ||
andrewklmn 46:0d60fbcfb245 306 back_water < min_back_water_temp) {
andrewklmn 46:0d60fbcfb245 307 // when if somewhere is colder than it must be
andrewklmn 46:0d60fbcfb245 308 if (hot_water > max_hot_water_temp) {
andrewklmn 46:0d60fbcfb245 309 heater_OFF = 1;
andrewklmn 46:0d60fbcfb245 310 } else {
andrewklmn 46:0d60fbcfb245 311 if ( heater_OFF == 1 ) {
andrewklmn 46:0d60fbcfb245 312 if (hot_water < (max_hot_water_temp - 10)) {
andrewklmn 46:0d60fbcfb245 313 heater_OFF = 0;
andrewklmn 46:0d60fbcfb245 314 } else {
andrewklmn 46:0d60fbcfb245 315 heater_OFF = 1;
andrewklmn 46:0d60fbcfb245 316 };
andrewklmn 46:0d60fbcfb245 317 } else {
andrewklmn 46:0d60fbcfb245 318 heater_OFF = 0;
andrewklmn 46:0d60fbcfb245 319 };
andrewklmn 46:0d60fbcfb245 320 };
andrewklmn 46:0d60fbcfb245 321 } else {
andrewklmn 46:0d60fbcfb245 322 heater_OFF = 1;
andrewklmn 46:0d60fbcfb245 323 };
andrewklmn 46:0d60fbcfb245 324
andrewklmn 46:0d60fbcfb245 325 } else {
andrewklmn 46:0d60fbcfb245 326 //========================================demi season mode
andrewklmn 46:0d60fbcfb245 327 if (mebel < min_mebel_temp ||
andrewklmn 46:0d60fbcfb245 328 litos < min_litos_temp ||
andrewklmn 46:0d60fbcfb245 329 back_water < min_back_water_temp) {
andrewklmn 46:0d60fbcfb245 330 // when if somewhere is colder than it must be
andrewklmn 46:0d60fbcfb245 331 pomp_OFF = 0;
andrewklmn 46:0d60fbcfb245 332 if ( hot_water > (max_hot_water_temp - 5) ) {
andrewklmn 46:0d60fbcfb245 333 heater_OFF = 1;
andrewklmn 46:0d60fbcfb245 334 } else {
andrewklmn 46:0d60fbcfb245 335 if ( heater_OFF == 1 ) {
andrewklmn 46:0d60fbcfb245 336 if ( hot_water < (min_back_water_temp + 3) ) {
andrewklmn 46:0d60fbcfb245 337 heater_OFF = 0;
andrewklmn 46:0d60fbcfb245 338 } else {
andrewklmn 46:0d60fbcfb245 339 heater_OFF = 1;
andrewklmn 46:0d60fbcfb245 340 };
andrewklmn 46:0d60fbcfb245 341 } else {
andrewklmn 46:0d60fbcfb245 342 heater_OFF = 0;
andrewklmn 46:0d60fbcfb245 343 };
andrewklmn 46:0d60fbcfb245 344 };
andrewklmn 46:0d60fbcfb245 345 } else {
andrewklmn 46:0d60fbcfb245 346 heater_OFF = 1;
andrewklmn 46:0d60fbcfb245 347 if ( hot_water > min_back_water_temp ) {
andrewklmn 46:0d60fbcfb245 348 pomp_OFF = 0;
andrewklmn 46:0d60fbcfb245 349 } else {
andrewklmn 46:0d60fbcfb245 350 pomp_OFF = 1;
andrewklmn 46:0d60fbcfb245 351 };
andrewklmn 46:0d60fbcfb245 352 };
andrewklmn 46:0d60fbcfb245 353
andrewklmn 46:0d60fbcfb245 354 };
andrewklmn 45:abc682827659 355 };