Commit 11824cae11339b6359dc982e45a8471d4bd98412

Authored by Pierre Letousey
1 parent c0152e3d

Added automatic pumping

Showing 6 changed files with 207 additions and 40 deletions   Show diff stats
@@ -3,18 +3,19 @@ @@ -3,18 +3,19 @@
3 #include <stdbool.h> 3 #include <stdbool.h>
4 #include "hvc.h" 4 #include "hvc.h"
5 #include "heat.h" 5 #include "heat.h"
  6 +#include "pump.h"
6 #include "printx.h" 7 #include "printx.h"
7 8
8 #define TASK_NUMBER 32 9 #define TASK_NUMBER 32
9 #define T_INIT_THRESH 40 10 #define T_INIT_THRESH 40
10 -#define T_STEP_THRESH 80 //OP is 86  
11 -#define T_HOLD_THRESH 82 //OP is 88 11 +#define T_STEP_THRESH 80
  12 +#define T_HOLD_THRESH 85 //OP is 88
12 #define INIT_HEAT_TIME 15 13 #define INIT_HEAT_TIME 15
13 #define INIT_WAIT_TIME 15 14 #define INIT_WAIT_TIME 15
14 #define STEP_HEAT_TIME 2 15 #define STEP_HEAT_TIME 2
15 #define STEP_WAIT_TIME 8 //OP is 5 16 #define STEP_WAIT_TIME 8 //OP is 5
16 #define HOLD_HEAT_TIME 1 17 #define HOLD_HEAT_TIME 1
17 -#define HOLD_WAIT_TIME 8 //OP is 4 18 +#define HOLD_WAIT_TIME 8
18 #define HOLD_PUMP_HEAT_TIME 3 19 #define HOLD_PUMP_HEAT_TIME 3
19 #define HOLD_PUMP_WAIT_TIME 5 20 #define HOLD_PUMP_WAIT_TIME 5
20 21
@@ -22,19 +23,16 @@ @@ -22,19 +23,16 @@
22 //Globals 23 //Globals
23 time_t tTask; 24 time_t tTask;
24 time_t tNow; 25 time_t tNow;
25 -float tAct; //Lecture de la température du capteur 26 +float tAct;
26 bool task[TASK_NUMBER]; 27 bool task[TASK_NUMBER];
27 bool stop=false; 28 bool stop=false;
28 -bool heat_ok=false;  
29 bool hold_heat=true; 29 bool hold_heat=true;
30 -bool pumpitup=false; //Lecture de l'état de la pompe  
31 bool eco_mode=false; 30 bool eco_mode=false;
32 bool stopHeat=false; 31 bool stopHeat=false;
33 - 32 +bool heat_ok=false;
34 33
35 void initProcessHeat(void) 34 void initProcessHeat(void)
36 { 35 {
37 - //Initialisation du tableau task  
38 task[0]=true; 36 task[0]=true;
39 for (int i_initH=1;i_initH<TASK_NUMBER;i_initH++) 37 for (int i_initH=1;i_initH<TASK_NUMBER;i_initH++)
40 task[i_initH]=false; 38 task[i_initH]=false;
@@ -50,6 +48,21 @@ void stopAutoHeat(void) @@ -50,6 +48,21 @@ void stopAutoHeat(void)
50 stopHeat = true; 48 stopHeat = true;
51 } 49 }
52 50
  51 +void setHeatOk(void)
  52 +{
  53 + heat_ok=true;
  54 +}
  55 +
  56 +void resetHeatOk(void)
  57 +{
  58 + heat_ok=false;
  59 +}
  60 +
  61 +bool isHeatOk(void)
  62 +{
  63 + return heat_ok;
  64 +}
  65 +
53 void* processHeat(void* arg) 66 void* processHeat(void* arg)
54 { 67 {
55 while(!stopHeat) 68 while(!stopHeat)
@@ -64,7 +77,7 @@ void* processHeat(void* arg) @@ -64,7 +77,7 @@ void* processHeat(void* arg)
64 if (tAct < T_INIT_THRESH) 77 if (tAct < T_INIT_THRESH)
65 { 78 {
66 setHeatOn(); 79 setHeatOn();
67 - printx(INFO, BUS, "Début chauffe initiale 0"); 80 + printx(INFO, BUS, "Début chauffe initiale 0\n");
68 task[0] = false; 81 task[0] = false;
69 task[1] = true; 82 task[1] = true;
70 } 83 }
@@ -88,7 +101,7 @@ void* processHeat(void* arg) @@ -88,7 +101,7 @@ void* processHeat(void* arg)
88 if( ((tNow - tTask) / CLOCKS_PER_SEC) > INIT_HEAT_TIME ) 101 if( ((tNow - tTask) / CLOCKS_PER_SEC) > INIT_HEAT_TIME )
89 { 102 {
90 setHeatOff(); 103 setHeatOff();
91 - printx(INFO, BUS, "Fin chauffe initiale 1"); 104 + printx(INFO, BUS, "Fin chauffe initiale 1\n");
92 task[2] = false; 105 task[2] = false;
93 task[3] = true; 106 task[3] = true;
94 } 107 }
@@ -105,7 +118,7 @@ void* processHeat(void* arg) @@ -105,7 +118,7 @@ void* processHeat(void* arg)
105 { 118 {
106 if( ((tNow - tTask) / CLOCKS_PER_SEC) > INIT_WAIT_TIME ) 119 if( ((tNow - tTask) / CLOCKS_PER_SEC) > INIT_WAIT_TIME )
107 { 120 {
108 - printx(INFO, BUS, "Fin attente %d sec 2", INIT_WAIT_TIME); 121 + printx(INFO, BUS, "Fin attente %d sec 2\n", INIT_WAIT_TIME);
109 task[4] = false; 122 task[4] = false;
110 task[5] = true; 123 task[5] = true;
111 } 124 }
@@ -125,7 +138,7 @@ void* processHeat(void* arg) @@ -125,7 +138,7 @@ void* processHeat(void* arg)
125 { 138 {
126 if (tAct < T_STEP_THRESH) 139 if (tAct < T_STEP_THRESH)
127 { 140 {
128 - printx(INFO, BUS, "Début Chauffe par palier 3"); 141 + printx(INFO, BUS, "Début Chauffe par palier 3\n");
129 setHeatOn(); 142 setHeatOn();
130 task[6] = false; 143 task[6] = false;
131 task[7] = true; 144 task[7] = true;
@@ -149,7 +162,7 @@ void* processHeat(void* arg) @@ -149,7 +162,7 @@ void* processHeat(void* arg)
149 { 162 {
150 if( ((tNow - tTask) / CLOCKS_PER_SEC) > STEP_HEAT_TIME ) 163 if( ((tNow - tTask) / CLOCKS_PER_SEC) > STEP_HEAT_TIME )
151 { 164 {
152 - printx(INFO, BUS, "Fin de chauffe palier intermédiaire 4"); 165 + printx(INFO, BUS, "Fin de chauffe palier intermédiaire 4\n");
153 setHeatOff(); 166 setHeatOff();
154 task[8] = false; 167 task[8] = false;
155 task[9] = true; 168 task[9] = true;
@@ -167,7 +180,7 @@ void* processHeat(void* arg) @@ -167,7 +180,7 @@ void* processHeat(void* arg)
167 { 180 {
168 if( ((tNow - tTask) / CLOCKS_PER_SEC) > STEP_WAIT_TIME ) 181 if( ((tNow - tTask) / CLOCKS_PER_SEC) > STEP_WAIT_TIME )
169 { 182 {
170 - printx(INFO, BUS, "Fin d'attente palier intermédiaire 5"); 183 + printx(INFO, BUS, "Fin d'attente palier intermédiaire 5\n");
171 184
172 if ( tAct < T_STEP_THRESH ) 185 if ( tAct < T_STEP_THRESH )
173 { 186 {
@@ -194,8 +207,8 @@ void* processHeat(void* arg) @@ -194,8 +207,8 @@ void* processHeat(void* arg)
194 207
195 else if (task[12]) 208 else if (task[12])
196 { 209 {
197 - printx(INFO, BUS, "Début Maintien au chaud 6");  
198 - heat_ok = true; 210 + printx(INFO, BUS, "Début Maintien au chaud 6\n");
  211 + setHeatOk();
199 task[12]=false; 212 task[12]=false;
200 task[13]=true; 213 task[13]=true;
201 } 214 }
@@ -212,10 +225,10 @@ void* processHeat(void* arg) @@ -212,10 +225,10 @@ void* processHeat(void* arg)
212 if(hold_heat) 225 if(hold_heat)
213 { 226 {
214 if( (tAct < T_HOLD_THRESH)) 227 if( (tAct < T_HOLD_THRESH))
215 - {  
216 - if (!pumpitup) 228 + {
  229 + if (!isPumpOn())
217 { 230 {
218 - printx(INFO, BUS, "Début Chauffe maintien sans pompe 7"); 231 + printx(INFO, BUS, "Début Chauffe maintien sans pompe 7\n");
219 setHeatOn(); 232 setHeatOn();
220 task[14] = false; 233 task[14] = false;
221 task[15] = true; 234 task[15] = true;
@@ -223,7 +236,7 @@ void* processHeat(void* arg) @@ -223,7 +236,7 @@ void* processHeat(void* arg)
223 236
224 else 237 else
225 { 238 {
226 - printx(INFO, BUS, "Début Chauffe maintien avec pompe 7'"); 239 + printx(INFO, BUS, "Début Chauffe maintien avec pompe 7'\n");
227 setHeatOn(); 240 setHeatOn();
228 task[14]=false; 241 task[14]=false;
229 task[19]=true; //Numéro de tache "T<Thold && pumpitup" 242 task[19]=true; //Numéro de tache "T<Thold && pumpitup"
@@ -234,7 +247,7 @@ void* processHeat(void* arg) @@ -234,7 +247,7 @@ void* processHeat(void* arg)
234 247
235 else 248 else
236 { 249 {
237 - printx(INFO, BUS, "Maintien au chaud annulé 7 ' ' Go etape de fin"); 250 + printx(INFO, BUS, "Maintien au chaud annulé 7 ' ' Go etape de fin\n");
238 task[14]=false; 251 task[14]=false;
239 task[23]=true; //Sinon go étape d'attente fin 252 task[23]=true; //Sinon go étape d'attente fin
240 } 253 }
@@ -252,7 +265,7 @@ void* processHeat(void* arg) @@ -252,7 +265,7 @@ void* processHeat(void* arg)
252 { 265 {
253 if( ((tNow - tTask) / CLOCKS_PER_SEC) > HOLD_HEAT_TIME ) 266 if( ((tNow - tTask) / CLOCKS_PER_SEC) > HOLD_HEAT_TIME )
254 { 267 {
255 - printx(INFO, BUS, "Fin chauffe maintien sans pompe 8"); 268 + printx(INFO, BUS, "Fin chauffe maintien sans pompe 8\n");
256 setHeatOff(); 269 setHeatOff();
257 task[16] = false; 270 task[16] = false;
258 task[17] = true; 271 task[17] = true;
@@ -272,7 +285,7 @@ void* processHeat(void* arg) @@ -272,7 +285,7 @@ void* processHeat(void* arg)
272 { 285 {
273 if ( tAct < T_HOLD_THRESH) 286 if ( tAct < T_HOLD_THRESH)
274 { 287 {
275 - printx(INFO, BUS, "Fin d'attente chauffe intermédiaire maintien 9"); 288 + printx(INFO, BUS, "Fin d'attente chauffe intermédiaire maintien 9\n");
276 task[18] = false; 289 task[18] = false;
277 task[11] = true; //Retour au début de "Maintien au chaud" 290 task[11] = true; //Retour au début de "Maintien au chaud"
278 } 291 }
@@ -291,7 +304,7 @@ void* processHeat(void* arg) @@ -291,7 +304,7 @@ void* processHeat(void* arg)
291 { 304 {
292 if( ((tNow - tTask) / CLOCKS_PER_SEC) > HOLD_PUMP_HEAT_TIME ) 305 if( ((tNow - tTask) / CLOCKS_PER_SEC) > HOLD_PUMP_HEAT_TIME )
293 { 306 {
294 - printx(INFO, BUS, "Fin chauffe maintien avec pompe 10"); 307 + printx(INFO, BUS, "Fin chauffe maintien avec pompe 10\n");
295 setHeatOff(); 308 setHeatOff();
296 task[20] = false; 309 task[20] = false;
297 task[21] = true; 310 task[21] = true;
@@ -311,7 +324,7 @@ void* processHeat(void* arg) @@ -311,7 +324,7 @@ void* processHeat(void* arg)
311 { 324 {
312 if ( tAct < T_HOLD_THRESH) 325 if ( tAct < T_HOLD_THRESH)
313 { 326 {
314 - printx(INFO, BUS, "Fin d'attente chauffe intermédiaire maintien avec pompe 11"); 327 + printx(INFO, BUS, "Fin d'attente chauffe intermédiaire maintien avec pompe 11\n");
315 task[22] = false; 328 task[22] = false;
316 task[11] = true; //Retour au début de "Maintien au chaud" 329 task[11] = true; //Retour au début de "Maintien au chaud"
317 } 330 }
@@ -5,5 +5,8 @@ void initProcessHeat(void); @@ -5,5 +5,8 @@ void initProcessHeat(void);
5 void* processHeat(void*); 5 void* processHeat(void*);
6 void actTemp(float); 6 void actTemp(float);
7 void stopAutoHeat(void); 7 void stopAutoHeat(void);
  8 +void setHeatOk(void);
  9 +void resetHeatOk(void);
  10 +bool isHeatOk(void);
8 11
9 #endif 12 #endif
@@ -14,6 +14,7 @@ @@ -14,6 +14,7 @@
14 #include "printx.h" 14 #include "printx.h"
15 #include "serial.h" 15 #include "serial.h"
16 #include "heat.h" 16 #include "heat.h"
  17 +#include "pump.h"
17 18
18 #define DEVICE1 "/dev/ttyACM1" 19 #define DEVICE1 "/dev/ttyACM1"
19 #define SPEED B19200 20 #define SPEED B19200
1 #include <stdio.h> 1 #include <stdio.h>
2 #include <pthread.h> 2 #include <pthread.h>
  3 +#include <unistd.h>
3 #include "printx.h" 4 #include "printx.h"
4 #include "ui.h" 5 #include "ui.h"
5 #include "nfc.h" 6 #include "nfc.h"
6 #include "bus.h" 7 #include "bus.h"
7 #include "hvc.h" 8 #include "hvc.h"
8 #include "heat.h" 9 #include "heat.h"
  10 +#include "pump.h"
9 11
10 -#include <unistd.h>  
11 12
12 int main(void) 13 int main(void)
13 { 14 {
@@ -46,6 +47,7 @@ int main(void) @@ -46,6 +47,7 @@ int main(void)
46 } 47 }
47 pthread_create(&tHVC, NULL, processHVC, NULL); 48 pthread_create(&tHVC, NULL, processHVC, NULL);
48 initProcessHeat(); 49 initProcessHeat();
  50 + initProcessPump();
49 setPumpOn(); 51 setPumpOn();
50 processHeat(NULL); 52 processHeat(NULL);
51 53
@@ -2,36 +2,178 @@ @@ -2,36 +2,178 @@
2 #include <time.h> 2 #include <time.h>
3 #include <stdbool.h> 3 #include <stdbool.h>
4 #include <unistd.h> 4 #include <unistd.h>
  5 +#include "printx.h"
5 #include "hvc.h" 6 #include "hvc.h"
  7 +#include "heat.h"
6 #include "pump.h" 8 #include "pump.h"
7 9
8 -#define K_DEB 1925 //en imp/L  
9 10
10 -void* processPump(void* arg) 11 +#define K_DEB 1925 //en imp/L
  12 +#define VOL_IMP_SHORT_COFFEE 97 //pour 5cl
  13 +#define VOL_IMP_LONG_COFFEE 231 //pour 12cl
  14 +#define TASK_NUMBER_PUMP 16
  15 +
  16 +
  17 +//Globals
  18 +bool stopPump=false;
  19 +bool coffee_wanted=false;
  20 +bool pump_on=false;
  21 +int volDeb=0; // Lecture volume du débitmetre en impulsion
  22 +int volWanted=0;
  23 +bool taskP[TASK_NUMBER_PUMP];
  24 +time_t tTaskP;
  25 +time_t tNowP;
  26 +
  27 +
  28 +void initProcessPump(void)
11 { 29 {
12 - bool stopPump=false;  
13 - bool heat_ok=false;  
14 - bool coffee_wanted=false;  
15 - int volDeb=0; // Volume du débitmetre en impulsion  
16 - int volWanted=0; 30 + taskP[0]=true;
  31 + for (int i_initP=1;i_initP<TASK_NUMBER_PUMP;i_initP++)
  32 + taskP[i_initP]=false;
  33 +}
17 34
  35 +void stopAutoPump(void)
  36 +{
  37 + stopPump = true;
  38 +}
  39 +
  40 +void setCoffeeWanted(void)
  41 +{
  42 + coffee_wanted = true;
  43 +}
  44 +
  45 +//Determine le volume en fonction de l'entier reçu (1 pour café court, 2 pour long, si autre : volume personalisé en cl)
  46 +void setVolWanted (int v)
  47 +{
  48 + if (v == 1)
  49 + volWanted = VOL_IMP_SHORT_COFFEE;
  50 +
  51 + else if (v == 2)
  52 + volWanted = VOL_IMP_LONG_COFFEE;
  53 +
  54 + else if ((v > 5) && (v <= 20))
  55 + volWanted = (v*K_DEB)/100;
  56 +
  57 + else
  58 + volWanted = 0;
  59 +}
  60 +
  61 +void actDeb(int v)
  62 +{
  63 + volDeb = v;
  64 +}
  65 +
  66 +bool isPumpOn(void)
  67 +{
  68 + return pump_on;
  69 +}
  70 +
  71 +void* processPump(void* arg)
  72 +{
18 while (!stopPump) 73 while (!stopPump)
19 { 74 {
20 - if (heat_ok && coffee_wanted) 75 + tNowP = clock();
  76 +
  77 + if (taskP[0])
  78 + {
  79 + if (coffee_wanted)
  80 + {
  81 + printx(INFO, BUS, "Demande de café prise en compte 1\n");
  82 + taskP[0]=false;
  83 + taskP[1]=true;
  84 + }
  85 + }
  86 +
  87 + else if (taskP[1])
21 { 88 {
22 - if (volDeb < volWanted) 89 + if (isHeatOk())
23 { 90 {
24 - setPumpOn(); 91 + printx(INFO, BUS, "Chauffe eau a bonne temperature OK 2\n");
  92 + taskP[1]=false;
  93 + taskP[3]=true;
25 } 94 }
26 95
27 else 96 else
28 { 97 {
29 - setPumpOff();  
30 - coffee_wanted=false;  
31 - volDeb=0; 98 + printx(INFO, BUS, "Attente chauffe eau a bonne temperature 2'\n");
  99 + taskP[1]=false;
  100 + taskP[2]=true;
  101 + }
  102 + }
  103 +
  104 + else if (taskP[2])
  105 + {
  106 + if (isHeatOk())
  107 + {
  108 + taskP[2]=false;
  109 + taskP[3]=true;
  110 + }
  111 + }
  112 +
  113 + else if (taskP[3])
  114 + {
  115 + tTaskP = clock();
  116 + printx(INFO, BUS, "Distribution de l'eau Pompe ON 3\n");
  117 + taskP[3]=false;
  118 + taskP[4]=true;
  119 + }
  120 +
  121 + else if (taskP[4])
  122 + {
  123 + setPumpOn();
  124 + pump_on=true;
  125 +
  126 + if (volDeb > volWanted)
  127 + {
  128 + printx(INFO, BUS, "Fin de Distribution de l'eau Pompe OFF 4\n");
  129 + taskP[4]=false;
  130 + taskP[5]=true;
32 } 131 }
  132 +
  133 + else if ( ((tNowP - tTaskP) / CLOCKS_PER_SEC) > 60 )
  134 + {
  135 + printx(INFO, BUS, "Pompe utilisée depuis plus d'1 min, mise en pause 4'\n");
  136 + taskP[4]=false;
  137 + taskP[6]=false;
  138 + }
  139 + }
  140 +
  141 + else if (taskP[5])
  142 + {
  143 + setPumpOff();
  144 + pump_on=false;
  145 +
  146 + printx(INFO, BUS, "Cafe servi 5\n");
  147 + volWanted=0;
  148 + coffee_wanted=false;
  149 +
  150 + taskP[5]=false;
  151 + taskP[0]=true;
33 } 152 }
34 - sleep(1); 153 +
  154 + else if (taskP[6])
  155 + {
  156 + setPumpOff();
  157 + pump_on=false;
  158 +
  159 + printx(INFO, BUS, "En pause, Pompe OFF 6");
  160 +
  161 + tTaskP = clock();
  162 + taskP[6]=false;
  163 + taskP[7]=true;
  164 + }
  165 +
  166 + else if (taskP[7])
  167 + {
  168 + if ( ((tNowP - tTaskP) / CLOCKS_PER_SEC) > 60 )
  169 + {
  170 + printx(INFO, BUS, "Pause terminée 7\n");
  171 + taskP[7]=false;
  172 + taskP[4]=true;
  173 + }
  174 + }
  175 +
  176 + sleep(50);
35 } 177 }
36 178
37 return NULL; 179 return NULL;
1 #ifndef __PUMP_H__ 1 #ifndef __PUMP_H__
2 #define __PUMP_H__ 2 #define __PUMP_H__
3 3
  4 +void initProcessPump(void);
  5 +void stopAutoPump(void);
  6 +void actDeb(int);
  7 +void setCoffeeWanted(void);
  8 +void setVolWanted(int);
  9 +bool isPumpOn(void);
4 void* processPump(void*); 10 void* processPump(void*);
5 11
6 #endif 12 #endif