main/manual.c

changeset 0
b74b0e4902c3
child 54
7b134c27fadb
equal deleted inserted replaced
-1:000000000000 0:b74b0e4902c3
1 /**
2 * @file manual.c
3 * @brief Manual control functions.
4 */
5
6 #include "config.h"
7
8 bool _ManualHLT = false; ///< Use Hot Liquer Tank
9 bool _ManualMLT = false; ///< Use Mash/Boil kettle
10 bool loop;
11
12 extern sButton Buttons[MAXBUTTONS];
13 extern int Main_Screen;
14 extern DS18B20_State *ds18b20_state;
15 extern DRIVER_State *driver_state;
16 extern SemaphoreHandle_t xSemaphoreDS18B20;
17 extern SemaphoreHandle_t xSemaphoreDriver;
18
19 #ifdef CONFIG_TEMP_SENSORS_SIMULATOR
20 extern float Fake_MLT;
21 extern float Fake_HLT;
22 #endif
23
24 static const char *TAG = "manual";
25
26
27 /*
28 * Manual init function that only runs once a new screen
29 * is entered.
30 */
31 bool Manual_Init(void)
32 {
33 switch (Main_Screen) {
34 case MAIN_MANUAL_INIT:
35 ESP_LOGI(TAG, "Start manual mode");
36 if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
37 driver_state->enable = true;
38 xSemaphoreGive(xSemaphoreDriver);
39 }
40 break;
41
42 case MAIN_MANUAL_MAIN:
43 TopMessage("Handbediening");
44 Buttons_Add( 5, 200, 60, 40, "Stop", 0);
45 Buttons[0].dark = true;
46 uint8_t i = 1;
47 if (_ManualMLT) {
48 MLT_info(71, 26, false);
49 Buttons_Add( 5, 26, 60, 40, "+sp" , i++);
50 Buttons_Add(255, 26, 60, 40, "-sp" , i++);
51 Buttons_Add( 5, 76, 60, 40, "Pomp" , i++);
52 Buttons_Add(255, 76, 60, 40, "Aan" , i++);
53 }
54 if (_ManualHLT) {
55 HLT_info(71,150, false, false);
56 Buttons_Add( 5, 150, 60, 40, "+sp" , i++);
57 Buttons_Add(255, 150, 60, 40, "-sp" , i++);
58 Buttons_Add(255, 200, 60, 40, "Aan" , i);
59 }
60 Buttons_Show();
61 break;
62
63 default:
64 break;
65 }
66
67 return false;
68 }
69
70
71
72 /*
73 * Manual loop screens, non-blocking.
74 */
75 bool Manual_Loop(void)
76 {
77 switch (Main_Screen) {
78 case MAIN_MANUAL_INIT:
79 _ManualHLT = _ManualMLT = false;
80 Buttons_Add( 40, 100, 80, 40, "Ja", 0);
81 Buttons_Add(200, 100, 80, 40, "Nee", 1);
82 Buttons_Show();
83
84 if ((equipment.SSR2 == SSR2_HLT_SHARE) || (equipment.SSR2 == SSR2_HLT_IND)) {
85 TopMessage("Spoelwater ketel?");
86 SoundPlay(SOUND_Prompt);
87 loop = true;
88 while (loop) {
89 switch (Buttons_Scan()) {
90 case 0: loop = false;
91 _ManualHLT = true;
92 break;
93
94 case 1: loop = false;
95 _ManualHLT = false;
96 break;
97
98 default: break;
99 }
100 vTaskDelay(20 / portTICK_PERIOD_MS);
101 }
102 }
103
104 TopMessage("Maisch/Kook ketel?");
105 SoundPlay(SOUND_Prompt);
106 loop = true;
107 while (loop) {
108 switch (Buttons_Scan()) {
109 case 0: loop = false;
110 _ManualMLT = true;
111 break;
112
113 case 1: loop = false;
114 _ManualMLT = false;
115 break;
116
117 default: break;
118 }
119 vTaskDelay(20 / portTICK_PERIOD_MS);
120 }
121 Buttons_Clear();
122
123 if (! _ManualHLT && ! _ManualMLT) {
124 ESP_LOGI(TAG, "End manual mode");
125 Main_Screen = MAIN_MODE_FREE;
126 break;
127 }
128 if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
129 /* Set them all, even if not in use now. */
130 driver_state->hlt_sp = runtime.ManualHLT;
131 driver_state->mlt_sp = runtime.ManualMLT;
132 xSemaphoreGive(xSemaphoreDriver);
133 }
134 if (_ManualHLT) {
135 if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
136 driver_state->hlt_mode = HLT_MODE_OFF;
137 xSemaphoreGive(xSemaphoreDriver);
138 }
139 }
140 if (_ManualMLT) {
141 if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
142 driver_state->mlt_mode = MLT_MODE_OFF;
143 xSemaphoreGive(xSemaphoreDriver);
144 }
145 }
146 Main_Screen = MAIN_MANUAL_MAIN;
147 break;
148
149 case MAIN_MANUAL_MAIN:
150 if (_ManualMLT) {
151 MLT_info(71, 26, true);
152 }
153 if (_ManualHLT) {
154 HLT_info(71, 150, true, false);
155 }
156 switch (Buttons_Scan()) {
157 case 0: Main_Screen = MAIN_MODE_FREE;
158 ESP_LOGI(TAG, "End manual mode");
159 if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
160 runtime.ManualHLT = driver_state->hlt_sp;
161 runtime.ManualMLT = driver_state->mlt_sp;
162 driver_state->enable = false;
163 driver_state->mlt_mode = MLT_MODE_NONE;
164 driver_state->mlt_sp = 0.0;
165 driver_state->hlt_mode = HLT_MODE_NONE;
166 driver_state->hlt_sp = 0.0;
167 driver_state->pump_run = 0;
168 xSemaphoreGive(xSemaphoreDriver);
169 }
170 write_runtime();
171 break;
172
173 case 1: if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
174 if (_ManualMLT) {
175 driver_state->mlt_sp += 0.25;
176 } else {
177 driver_state->hlt_sp += 0.25;
178 }
179 xSemaphoreGive(xSemaphoreDriver);
180 }
181 break;
182
183 case 2: if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
184 if (_ManualMLT) {
185 driver_state->mlt_sp -= 0.25;
186 } else {
187 driver_state->hlt_sp -= 0.25;
188 }
189 xSemaphoreGive(xSemaphoreDriver);
190 }
191 break;
192
193 case 3: if (_ManualMLT) {
194 if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
195 if (driver_state->pump_run)
196 driver_state->pump_run = 0;
197 else
198 driver_state->pump_run = 1;
199 xSemaphoreGive(xSemaphoreDriver);
200 }
201 } else {
202 if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
203 if (driver_state->hlt_mode == HLT_MODE_BANG) {
204 driver_state->hlt_mode = HLT_MODE_OFF;
205 Buttons_Add(255, 200, 60, 40, "Aan" , 3);
206 ESP_LOGI(TAG, "HLT turned off");
207 } else {
208 driver_state->hlt_mode = HLT_MODE_BANG;
209 Buttons_Add(255, 200, 60, 40, "Uit" , 3);
210 ESP_LOGI(TAG, "HLT turned on");
211 }
212 xSemaphoreGive(xSemaphoreDriver);
213 }
214 Buttons_Show();
215 }
216 break;
217
218 case 4: if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
219 if (driver_state->mlt_mode == MLT_MODE_PID) {
220 driver_state->mlt_mode = MLT_MODE_OFF;
221 Buttons_Add(255, 76, 60, 40, "Aan" , 4);
222 ESP_LOGI(TAG, "MLT turned off");
223 } else {
224 driver_state->mlt_mode = MLT_MODE_PID;
225 Buttons_Add(255, 76, 60, 40, "Uit" , 4);
226 ESP_LOGI(TAG, "MLT turned on");
227 }
228 xSemaphoreGive(xSemaphoreDriver);
229 }
230 Buttons_Show();
231 break;
232
233 case 5: if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
234 driver_state->hlt_sp += 0.25;
235 xSemaphoreGive(xSemaphoreDriver);
236 }
237 break;
238
239 case 6: if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
240 driver_state->hlt_sp -= 0.25;
241 xSemaphoreGive(xSemaphoreDriver);
242 }
243 break;
244
245 case 7: if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
246 if (driver_state->hlt_mode == HLT_MODE_BANG) {
247 driver_state->hlt_mode = HLT_MODE_OFF;
248 Buttons_Add(255, 200, 60, 40, "Aan" , 7);
249 ESP_LOGI(TAG, "HLT turned off");
250 } else {
251 driver_state->hlt_mode = HLT_MODE_BANG;
252 Buttons_Add(255, 200, 60, 40, "Uit" , 7);
253 ESP_LOGI(TAG, "HLT turned on");
254 }
255 xSemaphoreGive(xSemaphoreDriver);
256 }
257 Buttons_Show();
258 break;
259
260 default: break;
261 }
262 break;
263
264 default:
265 break;
266 }
267
268 return false;
269 }
270

mercurial