main/automation.c

branch
stable
changeset 46
aaa095986ede
parent 43
2079940c3989
child 54
7b134c27fadb
equal deleted inserted replaced
35:1625e565ca31 46:aaa095986ede
38 bool _Prompt = false; ///< Prompt display flag 38 bool _Prompt = false; ///< Prompt display flag
39 39
40 extern bool System_TimeOk; ///< System time is valid 40 extern bool System_TimeOk; ///< System time is valid
41 extern sButton Buttons[MAXBUTTONS]; ///< Buttons definitions 41 extern sButton Buttons[MAXBUTTONS]; ///< Buttons definitions
42 extern int Main_Screen; ///< Current screen 42 extern int Main_Screen; ///< Current screen
43 extern int Sub_Screen; ///< Sub screen during mash
43 extern DS18B20_State *ds18b20_state; ///< DS18B20 state 44 extern DS18B20_State *ds18b20_state; ///< DS18B20 state
44 extern DRIVER_State *driver_state; ///< Relays driver state 45 extern DRIVER_State *driver_state; ///< Relays driver state
45 extern SemaphoreHandle_t xSemaphoreDS18B20; ///< DS18B20 lock semaphore 46 extern SemaphoreHandle_t xSemaphoreDS18B20; ///< DS18B20 lock semaphore
46 extern SemaphoreHandle_t xSemaphoreDriver; ///< Relays driver lock semaphore 47 extern SemaphoreHandle_t xSemaphoreDriver; ///< Relays driver lock semaphore
47 extern double Output; ///< Cakculated outpout power 48 extern double Output; ///< Cakculated outpout power
62 * Automation init function that only runs once when a 63 * Automation init function that only runs once when a
63 * new screen is entered. 64 * new screen is entered.
64 */ 65 */
65 bool Automation_Init(void) 66 bool Automation_Init(void)
66 { 67 {
68 char msg[64];
69
67 switch (Main_Screen) { 70 switch (Main_Screen) {
68 case MAIN_AUTO_INIT: 71 case MAIN_AUTO_INIT1:
69 #ifdef CONFIG_TEMP_SENSORS_SIMULATOR 72 #ifdef CONFIG_TEMP_SENSORS_SIMULATOR
70 Fake_MLT = recipe.MashStep[0].Temperature - 10; 73 Fake_MLT = recipe.MashStep[0].Temperature - 10;
71 Fake_HLT = recipe.SpargeTemp - 15; 74 Fake_HLT = recipe.SpargeTemp - 15;
72 if (xSemaphoreTake(xSemaphoreDS18B20, 10) == pdTRUE) { 75 if (xSemaphoreTake(xSemaphoreDS18B20, 10) == pdTRUE) {
73 ds18b20_state->mlt_temperature = ((int)(Fake_MLT * 16)) / 16.0; 76 ds18b20_state->mlt_temperature = ((int)(Fake_MLT * 16)) / 16.0;
134 } 137 }
135 runtime.AutoModeStarted = true; 138 runtime.AutoModeStarted = true;
136 runtime.UseHLT = _UseHLT = false; 139 runtime.UseHLT = _UseHLT = false;
137 runtime.TimeBrewing = 0; 140 runtime.TimeBrewing = 0;
138 TimeBrewing = 0; 141 TimeBrewing = 0;
139 runtime.StageResume = MAIN_AUTO_INIT; 142 runtime.StageResume = MAIN_AUTO_INIT1;
140 runtime.StageTimeLeft = 0; 143 runtime.StageTimeLeft = 0;
141 runtime.HopAddition = 0; 144 runtime.HopAddition = 0;
142 runtime.Logfile[0] = '\0'; 145 runtime.Logfile[0] = '\0';
143 runtime.PumpCooling = false; 146 runtime.PumpCooling = false;
144 write_runtime(); 147 write_runtime();
145 power_MLT = power_HLT = counts = 0; 148 power_MLT = power_HLT = counts = 0;
146 log_clean(); 149 log_clean();
147 vTaskDelay(250 / portTICK_PERIOD_MS); // Allow some time 150 vTaskDelay(250 / portTICK_PERIOD_MS); // Allow some time
148 break; 151 break;
149 152
153 case MAIN_AUTO_INIT2:
150 case MAIN_AUTO_DELAYSTART: 154 case MAIN_AUTO_DELAYSTART:
151 break; 155 break;
152 156
153 case MAIN_AUTO_HEATUP: 157 case MAIN_AUTO_HEATUP:
154 if (runtime.UseHLT) { 158 if (runtime.UseHLT) {
194 MaxMash = recipe.MashStep[Main_Screen - MAIN_AUTO_MASH_IN + 1].Temperature; 198 MaxMash = recipe.MashStep[Main_Screen - MAIN_AUTO_MASH_IN + 1].Temperature;
195 } else { 199 } else {
196 MaxMash = 75.0; 200 MaxMash = 75.0;
197 } 201 }
198 } 202 }
199 MashState = MASH_NONE; 203 MashState = Sub_Screen = MASH_NONE;
204 snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"\"}", Main_Screen, Sub_Screen);
205 ws_server_send_text_clients("/ws", msg, strlen(msg));
200 pumpTime = 0; 206 pumpTime = 0;
201 pumpRest = false; 207 pumpRest = false;
202 runtime.StageResume = Main_Screen; 208 runtime.StageResume = Main_Screen;
203 updateRuntime = true; 209 updateRuntime = true;
204 TopMessage("Maischen"); 210 TopMessage("Maischen");
225 MLT_info(71, 26, false); 231 MLT_info(71, 26, false);
226 Buttons_Add( 5, 30, 60, 40, "+sp", 0); 232 Buttons_Add( 5, 30, 60, 40, "+sp", 0);
227 Buttons_Add(255, 30, 60, 40, "-sp", 1); 233 Buttons_Add(255, 30, 60, 40, "-sp", 1);
228 Buttons_Show(); 234 Buttons_Show();
229 ESP_LOGI(TAG, "Mash done, going to boil."); 235 ESP_LOGI(TAG, "Mash done, going to boil.");
236 Sub_Screen = 0;
230 break; 237 break;
231 238
232 case MAIN_AUTO_BOILING: 239 case MAIN_AUTO_BOILING:
233 if (Resume) { 240 if (Resume) {
234 TimeLeft = runtime.StageTimeLeft * 60; 241 TimeLeft = runtime.StageTimeLeft * 60;
235 } else { 242 } else {
236 // +1 minute for flameout and 2 seconds for a smooth transition. 243 // +1 minute for flameout and for a smooth transition.
237 runtime.StageTimeLeft = TimeLeft = (recipe.BoilTime * 60) + 60; 244 runtime.StageTimeLeft = TimeLeft = (recipe.BoilTime * 60) + 60;
238 runtime.StageResume = Main_Screen; 245 runtime.StageResume = Main_Screen;
239 runtime.HopAddition = 0; 246 runtime.HopAddition = 0;
240 } 247 }
241 SecsCount = 0; 248 SecsCount = 0;
255 Buttons_Add( 3, 190, 60, 40, "+1m", 2); 262 Buttons_Add( 3, 190, 60, 40, "+1m", 2);
256 Buttons_Add(257, 190, 60, 40, "-1m", 3); 263 Buttons_Add(257, 190, 60, 40, "-1m", 3);
257 Buttons_Show(); 264 Buttons_Show();
258 ESP_LOGI(TAG, "Boil temperature reached, boil %d minutes", (TimeLeft / 60) -1); 265 ESP_LOGI(TAG, "Boil temperature reached, boil %d minutes", (TimeLeft / 60) -1);
259 log_annotation(ANNOTATION_STAGE, "Koken"); 266 log_annotation(ANNOTATION_STAGE, "Koken");
267 Sub_Screen = 0;
260 break; 268 break;
261 269
262 case MAIN_AUTO_COOLING_H: 270 case MAIN_AUTO_COOLING_H:
263 case MAIN_AUTO_COOLING_M: 271 case MAIN_AUTO_COOLING_M:
264 case MAIN_AUTO_COOLING_C: 272 case MAIN_AUTO_COOLING_C:
283 Buttons_Show(); 291 Buttons_Show();
284 SoundPlay(SOUND_Prompt); 292 SoundPlay(SOUND_Prompt);
285 _Prompt = true; 293 _Prompt = true;
286 break; 294 break;
287 295
296 case MAIN_AUTO_WHIRLPOOL9:
288 case MAIN_AUTO_WHIRLPOOL7: 297 case MAIN_AUTO_WHIRLPOOL7:
289 case MAIN_AUTO_WHIRLPOOL6: 298 case MAIN_AUTO_WHIRLPOOL6:
290 case MAIN_AUTO_WHIRLPOOL2: 299 case MAIN_AUTO_WHIRLPOOL2:
291 TempReached = true; 300 TempReached = true;
292 runtime.StageResume = Main_Screen; 301 runtime.StageResume = Main_Screen;
371 * Automation loop screens. Mostly non-blocking. 380 * Automation loop screens. Mostly non-blocking.
372 */ 381 */
373 bool Automation_Loop(void) 382 bool Automation_Loop(void)
374 { 383 {
375 static bool beeped = false; 384 static bool beeped = false;
376 char tmp[32]; 385 char tmp[32], msg[256];
377 uint16_t y; 386 uint16_t y;
378 387
379 switch (Main_Screen) { 388 switch (Main_Screen) {
380 389
381 case MAIN_AUTO_INIT: 390 case MAIN_AUTO_INIT1:
382 /* 391 /*
383 * Present selected equipment and recipe. 392 * Present selected equipment and recipe.
384 */ 393 */
394 Sub_Screen = 1;
385 read_recipe(config.RecipeRec); 395 read_recipe(config.RecipeRec);
396 snprintf(msg, 255, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"\",\"brew1\":\"%s\",\"brew2\":\"%s\"}",
397 Main_Screen, Sub_Screen, equipment.Name, recipe.Name);
398 ws_server_send_text_clients("/ws", msg, strlen(msg));
386 y = 28; 399 y = 28;
387 TopMessage("Automaat"); 400 TopMessage("Automaat");
388 TFT_setFont(DEFAULT_FONT, NULL); 401 TFT_setFont(DEFAULT_FONT, NULL);
389 ShowText(2,y,"Installatie", equipment.Name); 402 ShowText(2,y,"Installatie", equipment.Name);
390 y += 16; 403 y += 16;
460 case 0: loop = false; 473 case 0: loop = false;
461 Main_Screen = MAIN_AUTO_ABORT; 474 Main_Screen = MAIN_AUTO_ABORT;
462 break; 475 break;
463 476
464 case 1: loop = false; 477 case 1: loop = false;
478 Main_Screen = MAIN_AUTO_INIT2;
465 break; 479 break;
466 480
467 default: break; 481 default: break;
468 } 482 }
469 vTaskDelay(20 / portTICK_PERIOD_MS); 483 vTaskDelay(20 / portTICK_PERIOD_MS);
470 } 484 }
471 if (Main_Screen == MAIN_AUTO_ABORT) 485 Buttons_Clear();
472 break; 486 break;
473 487
488 case MAIN_AUTO_INIT2:
474 _UseHLT = false; 489 _UseHLT = false;
475 _bg = TFT_BLACK; 490 _bg = TFT_BLACK;
476 TFT_fillScreen(_bg); 491 TFT_fillScreen(_bg);
477 TopMessage("Maisch water aanwezig?"); 492 TopMessage("Maisch water aanwezig?");
478 Buttons_Clear(); 493 Buttons_Clear();
596 if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { 611 if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
597 driver_state->mlt_sp = stageTemp; 612 driver_state->mlt_sp = stageTemp;
598 driver_state->mlt_mode = MLT_MODE_PID; 613 driver_state->mlt_mode = MLT_MODE_PID;
599 xSemaphoreGive(xSemaphoreDriver); 614 xSemaphoreGive(xSemaphoreDriver);
600 } 615 }
601 MashState = MASH_WAITTEMP; 616 MashState = Sub_Screen = MASH_WAITTEMP;
617 snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"\"}", Main_Screen, Sub_Screen);
618 ws_server_send_text_clients("/ws", msg, strlen(msg));
602 ESP_LOGI(TAG, "Mash step %d type: %s time: %d temp: %4.1f min: %4.1f max: %4.1f", 619 ESP_LOGI(TAG, "Mash step %d type: %s time: %d temp: %4.1f min: %4.1f max: %4.1f",
603 Main_Screen - MAIN_AUTO_MASH_IN, mashTypes[recipe.MashStep[Main_Screen - MAIN_AUTO_MASH_IN].Type], 620 Main_Screen - MAIN_AUTO_MASH_IN, mashTypes[recipe.MashStep[Main_Screen - MAIN_AUTO_MASH_IN].Type],
604 stageTime, stageTemp, MinMash, MaxMash); 621 stageTime, stageTemp, MinMash, MaxMash);
605 622
606 if (Main_Screen > MAIN_AUTO_MASH_IN) { 623 if (Main_Screen > MAIN_AUTO_MASH_IN) {
630 TFT_setFont(DEJAVU18_FONT, NULL); 647 TFT_setFont(DEJAVU18_FONT, NULL);
631 sprintf(temp_buf, "Infuse %.1f L/%.1f C", recipe.MashStep[Main_Screen - MAIN_AUTO_MASH_IN].Infusion_amount, 648 sprintf(temp_buf, "Infuse %.1f L/%.1f C", recipe.MashStep[Main_Screen - MAIN_AUTO_MASH_IN].Infusion_amount,
632 recipe.MashStep[Main_Screen - MAIN_AUTO_MASH_IN].Infusion_temp); 649 recipe.MashStep[Main_Screen - MAIN_AUTO_MASH_IN].Infusion_temp);
633 TFT_print(temp_buf, CENTER, 135); 650 TFT_print(temp_buf, CENTER, 135);
634 SoundPlay(SOUND_Prompt); 651 SoundPlay(SOUND_Prompt);
635 MashState = MASH_INFUSE; 652 MashState = Sub_Screen = MASH_INFUSE;
653 snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"%s\"}", Main_Screen, Sub_Screen, temp_buf);
654 ws_server_send_text_clients("/ws", msg, strlen(msg));
636 if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { 655 if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
637 // No heating during the infusion. 656 // No heating during the infusion.
638 driver_state->mlt_sp = stageTemp; 657 driver_state->mlt_sp = stageTemp;
639 driver_state->mlt_mode = MLT_MODE_OFF; 658 driver_state->mlt_mode = MLT_MODE_OFF;
640 xSemaphoreGive(xSemaphoreDriver); 659 xSemaphoreGive(xSemaphoreDriver);
652 Steady = 0; 671 Steady = 0;
653 } 672 }
654 if ((temp_MLT >= stageTemp) && (Steady > 10)) { 673 if ((temp_MLT >= stageTemp) && (Steady > 10)) {
655 SoundPlay(SOUND_TempReached); 674 SoundPlay(SOUND_TempReached);
656 TempReached = true; 675 TempReached = true;
657 MashState = MASH_REST; 676 MashState = Sub_Screen = MASH_REST;
677 snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"\"}", Main_Screen, Sub_Screen);
678 ws_server_send_text_clients("/ws", msg, strlen(msg));
658 if (Main_Screen == MAIN_AUTO_MASH_IN) { 679 if (Main_Screen == MAIN_AUTO_MASH_IN) {
659 TimerSet(0); 680 TimerSet(0);
660 } else { 681 } else {
661 if (Resume && (runtime.StageTimeLeft < stageTime)) 682 if (Resume && (runtime.StageTimeLeft < stageTime))
662 TimerSet(runtime.StageTimeLeft * 60); 683 TimerSet(runtime.StageTimeLeft * 60);
754 _fg = TFT_WHITE; 775 _fg = TFT_WHITE;
755 _bg = TFT_BLACK; 776 _bg = TFT_BLACK;
756 TFT_setFont(DEJAVU24_FONT, NULL); 777 TFT_setFont(DEJAVU24_FONT, NULL);
757 TFT_print("Mout storten?", CENTER, 135); 778 TFT_print("Mout storten?", CENTER, 135);
758 SoundPlay(SOUND_Prompt); 779 SoundPlay(SOUND_Prompt);
759 MashState = MASH_ADD; 780 MashState = Sub_Screen = MASH_ADD;
781 snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"Mout storten?\"}", Main_Screen, Sub_Screen);
782 ws_server_send_text_clients("/ws", msg, strlen(msg));
760 ESP_LOGI(TAG, "Mash add prompt"); 783 ESP_LOGI(TAG, "Mash add prompt");
761 break; 784 break;
762 } 785 }
763 if (((Main_Screen - MAIN_AUTO_MASH_IN) == LastMashStep) && config.AskIodine) { 786 if (((Main_Screen - MAIN_AUTO_MASH_IN) == LastMashStep) && config.AskIodine) {
764 /* 787 /*
776 TFT_setFont(DEJAVU24_FONT, NULL); 799 TFT_setFont(DEJAVU24_FONT, NULL);
777 TFT_print("Jodium test?", CENTER, 127); 800 TFT_print("Jodium test?", CENTER, 127);
778 SoundPlay(SOUND_Prompt); 801 SoundPlay(SOUND_Prompt);
779 beeped = false; 802 beeped = false;
780 TimerSet(config.IodineTime * 60); 803 TimerSet(config.IodineTime * 60);
781 MashState = MASH_IODINE; 804 MashState = Sub_Screen = MASH_IODINE;
805 snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"Jodium test?\"}", Main_Screen, Sub_Screen);
806 ws_server_send_text_clients("/ws", msg, strlen(msg));
782 ESP_LOGI(TAG, "Mash iodine test prompt"); 807 ESP_LOGI(TAG, "Mash iodine test prompt");
783 break; 808 break;
784 } 809 }
785 if ((Main_Screen == MAIN_AUTO_MASH_OUT) && config.AskRemove) { 810 if ((Main_Screen == MAIN_AUTO_MASH_OUT) && config.AskRemove) {
786 /* 811 /*
796 _fg = TFT_WHITE; 821 _fg = TFT_WHITE;
797 _bg = TFT_BLACK; 822 _bg = TFT_BLACK;
798 TFT_setFont(DEJAVU18_FONT, NULL); 823 TFT_setFont(DEJAVU18_FONT, NULL);
799 TFT_print("Mout verwijderen?", CENTER, 135); 824 TFT_print("Mout verwijderen?", CENTER, 135);
800 SoundPlay(SOUND_Prompt); 825 SoundPlay(SOUND_Prompt);
801 MashState = MASH_REMOVE; 826 MashState = Sub_Screen = MASH_REMOVE;
827 snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"Mout verwijderen?\"}", Main_Screen, Sub_Screen);
828 ws_server_send_text_clients("/ws", msg, strlen(msg));
802 ESP_LOGI(TAG, "Mash remove prompt"); 829 ESP_LOGI(TAG, "Mash remove prompt");
803 break; 830 break;
804 } 831 }
805 if (Main_Screen != MAIN_AUTO_ABORT) 832 if (Main_Screen != MAIN_AUTO_ABORT)
806 Main_Screen++; 833 Main_Screen++;
849 } 876 }
850 } else if (MashState == MASH_INFUSE) { 877 } else if (MashState == MASH_INFUSE) {
851 switch (Buttons_Scan()) { 878 switch (Buttons_Scan()) {
852 case 0: Main_Screen = MAIN_AUTO_ABORT; 879 case 0: Main_Screen = MAIN_AUTO_ABORT;
853 break; 880 break;
854 case 1: MashState = MASH_WAITTEMP; 881 case 1: MashState = Sub_Screen = MASH_WAITTEMP;
882 snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"\"}", Main_Screen, Sub_Screen);
883 ws_server_send_text_clients("/ws", msg, strlen(msg));
855 if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { 884 if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
856 // Start PID again. 885 // Start PID again.
857 driver_state->mlt_sp = stageTemp; 886 driver_state->mlt_sp = stageTemp;
858 driver_state->mlt_mode = MLT_MODE_PID; 887 driver_state->mlt_mode = MLT_MODE_PID;
859 xSemaphoreGive(xSemaphoreDriver); 888 xSemaphoreGive(xSemaphoreDriver);
1016 /* 1045 /*
1017 * Starting cooling, setup the screen. 1046 * Starting cooling, setup the screen.
1018 */ 1047 */
1019 Buttons_Clear(); 1048 Buttons_Clear();
1020 TFT_fillScreen(_bg); 1049 TFT_fillScreen(_bg);
1050 Sub_Screen = 1;
1021 if (Main_Screen == MAIN_AUTO_COOLING_H) { 1051 if (Main_Screen == MAIN_AUTO_COOLING_H) {
1022 stageTemp = 77.0; 1052 stageTemp = 77.0;
1023 } else if (Main_Screen == MAIN_AUTO_COOLING_M) { 1053 } else if (Main_Screen == MAIN_AUTO_COOLING_M) {
1024 stageTemp = 66.0; 1054 stageTemp = 66.0;
1025 } else { 1055 } else {
1026 stageTemp = recipe.CoolTemp; 1056 stageTemp = recipe.CoolTemp;
1027 } 1057 }
1058 snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"\"}", Main_Screen, Sub_Screen);
1059 ws_server_send_text_clients("/ws", msg, strlen(msg));
1028 CoolBeep = false; 1060 CoolBeep = false;
1029 ESP_LOGI(TAG, "Start cooling from %6.2f to %4.1f", ds18b20_state->mlt_temperature, stageTemp); 1061 ESP_LOGI(TAG, "Start cooling from %6.2f to %4.1f", ds18b20_state->mlt_temperature, stageTemp);
1030 if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { 1062 if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
1031 driver_state->mlt_mode = MLT_MODE_OFF; 1063 driver_state->mlt_mode = MLT_MODE_OFF;
1032 driver_state->mlt_sp = stageTemp; 1064 driver_state->mlt_sp = stageTemp;
1144 CoolBeep = true; 1176 CoolBeep = true;
1145 } 1177 }
1146 if (driver_state->mlt_pv <= driver_state->mlt_sp) { 1178 if (driver_state->mlt_pv <= driver_state->mlt_sp) {
1147 SoundPlay(SOUND_TempReached); 1179 SoundPlay(SOUND_TempReached);
1148 Main_Screen++; 1180 Main_Screen++;
1181 Sub_Screen = 0;
1149 } 1182 }
1150 xSemaphoreGive(xSemaphoreDriver); 1183 xSemaphoreGive(xSemaphoreDriver);
1151 } 1184 }
1152 } 1185 }
1153 break; 1186 break;
1177 /* 1210 /*
1178 * Prepare the screen for the actual whirpool. 1211 * Prepare the screen for the actual whirpool.
1179 */ 1212 */
1180 Buttons_Clear(); 1213 Buttons_Clear();
1181 TFT_fillScreen(_bg); 1214 TFT_fillScreen(_bg);
1215 Sub_Screen = 1;
1216 snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"\"}", Main_Screen, Sub_Screen);
1217 ws_server_send_text_clients("/ws", msg, strlen(msg));
1182 if (Main_Screen == MAIN_AUTO_WHIRLPOOL9) { 1218 if (Main_Screen == MAIN_AUTO_WHIRLPOOL9) {
1183 TimeWhirlPool = recipe.Whirlpool9; 1219 TimeWhirlPool = recipe.Whirlpool9;
1184 if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { 1220 if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
1185 driver_state->mlt_sp = 93.0; 1221 driver_state->mlt_sp = 93.0;
1186 driver_state->mlt_mode = MLT_MODE_PID; 1222 driver_state->mlt_mode = MLT_MODE_PID;
1225 updateRuntime = true; 1261 updateRuntime = true;
1226 MLT_info(71, 26, false); 1262 MLT_info(71, 26, false);
1227 ESP_LOGI(TAG, "Whirlpool %d minutes, sp %4.1f", TimeWhirlPool, driver_state->mlt_sp); 1263 ESP_LOGI(TAG, "Whirlpool %d minutes, sp %4.1f", TimeWhirlPool, driver_state->mlt_sp);
1228 Buttons_Add(255, 120, 60, 40, "+1m", 0); 1264 Buttons_Add(255, 120, 60, 40, "+1m", 0);
1229 Buttons_Add( 5, 120, 60, 40, "-1m", 1); 1265 Buttons_Add( 5, 120, 60, 40, "-1m", 1);
1230 Buttons_Add(130, 200, 60, 40, "Pomp", 2); 1266 Buttons_Add(255, 200, 60, 40, "Pomp", 2);
1231 Buttons_Show(); 1267 Buttons_Show();
1232 } 1268 }
1233 } else { 1269 } else {
1234 /* 1270 /*
1235 * Not running in prompt mode, do the whirlpool. 1271 * Not running in prompt mode, do the whirlpool.

mercurial