Wed, 10 Jun 2020 09:43:51 +0200
SDK settings to reduce bin size. Some log messages to debug level. Added KWH usage registration. Added equipment power usage for HLT and MLT. Equipment database upgraded to version 2, expandable. Fixed some screen errors during temperature mash steps.
/** * @file manual.c * @brief Manual control functions. */ #include "config.h" bool _ManualHLT = false; ///< Use Hot Liquer Tank bool _ManualMLT = false; ///< Use Mash/Boil kettle bool loop; extern sButton Buttons[MAXBUTTONS]; extern int Main_Screen; extern DS18B20_State *ds18b20_state; extern DRIVER_State *driver_state; extern SemaphoreHandle_t xSemaphoreDS18B20; extern SemaphoreHandle_t xSemaphoreDriver; #ifdef CONFIG_TEMP_SENSORS_SIMULATOR extern float Fake_MLT; extern float Fake_HLT; #endif static const char *TAG = "manual"; /* * Manual init function that only runs once a new screen * is entered. */ bool Manual_Init(void) { switch (Main_Screen) { case MAIN_MANUAL_INIT: log_msg(TAG, "Start manual mode"); if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { driver_state->enable = true; xSemaphoreGive(xSemaphoreDriver); } break; case MAIN_MANUAL_MAIN: TopMessage((char *)"Handbediening"); Buttons_Add( 5, 200, 60, 40, (char *)"Stop", 0); Buttons[0].dark = true; uint8_t i = 1; if (_ManualMLT) { MLT_info(71, 26, false); Buttons_Add( 5, 26, 60, 40, (char *)"+sp" , i++); Buttons_Add(255, 26, 60, 40, (char *)"-sp" , i++); Buttons_Add( 5, 76, 60, 40, (char *)"Pomp" , i++); Buttons_Add(255, 76, 60, 40, (char *)"Aan" , i++); } if (_ManualHLT) { HLT_info(71,150, false, false); Buttons_Add( 5, 150, 60, 40, (char *)"+sp" , i++); Buttons_Add(255, 150, 60, 40, (char *)"-sp" , i++); Buttons_Add(255, 200, 60, 40, (char *)"Aan" , i); } Buttons_Show(); break; default: break; } return false; } /* * Manual loop screens, non-blocking. */ bool Manual_Loop(void) { switch (Main_Screen) { case MAIN_MANUAL_INIT: _ManualHLT = _ManualMLT = false; Buttons_Add( 40, 100, 80, 40, (char *)"Ja", 0); Buttons_Add(200, 100, 80, 40, (char *)"Nee", 1); Buttons_Show(); if ((equipment.SSR2 == SSR2_HLT_SHARE) || (equipment.SSR2 == SSR2_HLT_IND)) { TopMessage((char *)"Spoelwater ketel?"); SoundPlay(SOUND_Prompt); loop = true; while (loop) { switch (Buttons_Scan()) { case 0: loop = false; _ManualHLT = true; break; case 1: loop = false; _ManualHLT = false; break; default: break; } vTaskDelay(20 / portTICK_PERIOD_MS); } } TopMessage((char *)"Maisch/Kook ketel?"); SoundPlay(SOUND_Prompt); loop = true; while (loop) { switch (Buttons_Scan()) { case 0: loop = false; _ManualMLT = true; break; case 1: loop = false; _ManualMLT = false; break; default: break; } vTaskDelay(20 / portTICK_PERIOD_MS); } Buttons_Clear(); if (! _ManualHLT && ! _ManualMLT) { log_msg(TAG, "End manual mode"); Main_Screen = MAIN_MODE_FREE; break; } if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { /* Set them all, even if not in use now. */ driver_state->hlt_sp = runtime.ManualHLT; driver_state->mlt_sp = runtime.ManualMLT; xSemaphoreGive(xSemaphoreDriver); } if (_ManualHLT) { if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { driver_state->hlt_mode = HLT_MODE_OFF; xSemaphoreGive(xSemaphoreDriver); } } if (_ManualMLT) { if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { driver_state->mlt_mode = MLT_MODE_OFF; xSemaphoreGive(xSemaphoreDriver); } } log_msg(TAG, "HLT:%s MLT:%s", (_ManualHLT)?"true":"false", (_ManualMLT)?"true":"false"); Main_Screen = MAIN_MANUAL_MAIN; break; case MAIN_MANUAL_MAIN: if (_ManualMLT) { MLT_info(71, 26, true); } if (_ManualHLT) { HLT_info(71, 150, true, false); } switch (Buttons_Scan()) { case 0: Main_Screen = MAIN_MODE_FREE; log_msg(TAG, "End manual mode"); if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { runtime.ManualHLT = driver_state->hlt_sp; runtime.ManualMLT = driver_state->mlt_sp; driver_state->enable = false; driver_state->mlt_mode = MLT_MODE_NONE; driver_state->mlt_sp = 0.0; driver_state->hlt_mode = HLT_MODE_NONE; driver_state->hlt_sp = 0.0; driver_state->pump_run = 0; xSemaphoreGive(xSemaphoreDriver); } write_runtime(); break; case 1: if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { if (_ManualMLT) { driver_state->mlt_sp += 0.25; log_msg(TAG, "MLT sp %.2f", driver_state->mlt_sp); } else { driver_state->hlt_sp += 0.25; log_msg(TAG, "HLT sp %.2f", driver_state->hlt_sp); } xSemaphoreGive(xSemaphoreDriver); } break; case 2: if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { if (_ManualMLT) { driver_state->mlt_sp -= 0.25; log_msg(TAG, "MLT sp %.2f", driver_state->mlt_sp); } else { driver_state->hlt_sp -= 0.25; log_msg(TAG, "HLT sp %.2f", driver_state->hlt_sp); } xSemaphoreGive(xSemaphoreDriver); } break; case 3: if (_ManualMLT) { if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { if (driver_state->pump_run) driver_state->pump_run = 0; else driver_state->pump_run = 1; xSemaphoreGive(xSemaphoreDriver); } log_msg(TAG, "Pump turned %s", driver_state->pump_run?"on":"off"); } else { if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { if (driver_state->hlt_mode == HLT_MODE_BANG) { driver_state->hlt_mode = HLT_MODE_OFF; Buttons_Add(255, 200, 60, 40, (char *)"Aan" , 3); log_msg(TAG, "HLT turned off"); } else { driver_state->hlt_mode = HLT_MODE_BANG; Buttons_Add(255, 200, 60, 40, (char *)"Uit" , 3); log_msg(TAG, "HLT turned on sp %.2f", driver_state->hlt_sp); } xSemaphoreGive(xSemaphoreDriver); } Buttons_Show(); } break; case 4: if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { if (driver_state->mlt_mode == MLT_MODE_PID) { driver_state->mlt_mode = MLT_MODE_OFF; Buttons_Add(255, 76, 60, 40, (char *)"Aan" , 4); log_msg(TAG, "MLT turned off"); } else { driver_state->mlt_mode = MLT_MODE_PID; Buttons_Add(255, 76, 60, 40, (char *)"Uit" , 4); log_msg(TAG, "MLT turned on sp %.2f", driver_state->mlt_sp); } xSemaphoreGive(xSemaphoreDriver); } Buttons_Show(); break; case 5: if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { driver_state->hlt_sp += 0.25; xSemaphoreGive(xSemaphoreDriver); } log_msg(TAG, "HLT sp %.2f", driver_state->hlt_sp); break; case 6: if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { driver_state->hlt_sp -= 0.25; xSemaphoreGive(xSemaphoreDriver); } log_msg(TAG, "HLT sp %.2f", driver_state->hlt_sp); break; case 7: if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { if (driver_state->hlt_mode == HLT_MODE_BANG) { driver_state->hlt_mode = HLT_MODE_OFF; Buttons_Add(255, 200, 60, 40, (char *)"Aan" , 7); log_msg(TAG, "HLT turned off"); } else { driver_state->hlt_mode = HLT_MODE_BANG; Buttons_Add(255, 200, 60, 40, (char *)"Uit" , 7); log_msg(TAG, "HLT turned on %.2f", driver_state->hlt_sp); } xSemaphoreGive(xSemaphoreDriver); } Buttons_Show(); break; default: break; } break; default: break; } return false; }