para el ventilador

Dependencies:   QEI FastPWM

Committer:
miguelangel_2511
Date:
Thu May 07 03:52:31 2020 +0000
Revision:
11:5cb7ae8bd831
Parent:
10:b2d87404309a
Child:
12:3bc2465b034a
Se implemento un filtro IIIR tipo Chebyshev 2 Pasa-bajos de 30 Hz para cada sensor de presion.  Asimismo, se implemento un filtro IIR Chebyshev 2 Pasa-altos de 0.01 Hz y un filtro FIR pasa-bajos de 40 Hz para la senial de flujo.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
miguelangel_2511 6:d38287621cca 1
miguelangel_2511 6:d38287621cca 2 #include "mbed.h"
miguelangel_2511 6:d38287621cca 3 #include "stdint.h"
miguelangel_2511 6:d38287621cca 4 #include "project_defines.h"
miguelangel_2511 6:d38287621cca 5 #include "nextion_interface.h"
miguelangel_2511 6:d38287621cca 6 #include "encoder_interface.h"
miguelangel_2511 7:f4e248182d31 7 #include "pressure_sensors.h"
miguelangel_2511 7:f4e248182d31 8 #include "stepper_motor_driver.h"
miguelangel_2511 6:d38287621cca 9 #include "ventilator.h"
miguelangel_2511 7:f4e248182d31 10
miguelangel_2511 6:d38287621cca 11
miguelangel_2511 8:208d965a3bd2 12
miguelangel_2511 6:d38287621cca 13 /* Object definition */
miguelangel_2511 7:f4e248182d31 14 Serial nextion_display(NEXTION_DISPLAY_TX_PIN,NEXTION_DISPLAY_RX_PIN);
miguelangel_2511 11:5cb7ae8bd831 15
miguelangel_2511 6:d38287621cca 16
miguelangel_2511 6:d38287621cca 17 /* Global variable definition */
miguelangel_2511 6:d38287621cca 18
miguelangel_2511 6:d38287621cca 19 uint16_t volume_setpoint_display = VOLUME_SETPOINT_VALUE_DEFAULT;
miguelangel_2511 6:d38287621cca 20 uint16_t volume_measured_display = 480;
miguelangel_2511 6:d38287621cca 21 uint8_t resp_frequency_display = RESP_FREQUENCY_VALUE_DEFAULT;
miguelangel_2511 6:d38287621cca 22 float inspiration_time_display = INSPIRATION_TIME_VALUE_DEFAULT;
miguelangel_2511 6:d38287621cca 23 float expiration_time_display = EXPIRATION_TIME_VALUE_DEFAULT;
miguelangel_2511 6:d38287621cca 24 uint8_t pressure_measured_display = 16;
miguelangel_2511 11:5cb7ae8bd831 25
miguelangel_2511 6:d38287621cca 26
miguelangel_2511 6:d38287621cca 27 uint16_t selection_box_coordinates[3][4]={
miguelangel_2511 6:d38287621cca 28 {1,1,159,159},
miguelangel_2511 6:d38287621cca 29 {161,1,319,159},
miguelangel_2511 6:d38287621cca 30 {321,1,478, 159}
miguelangel_2511 6:d38287621cca 31 };
miguelangel_2511 6:d38287621cca 32
miguelangel_2511 6:d38287621cca 33 float i_e_ratio_display_table[I_E_RATIO_INDEX_LIMIT][2]={
miguelangel_2511 6:d38287621cca 34 {1.0,2.0},
miguelangel_2511 6:d38287621cca 35 {1.0,2.5},
miguelangel_2511 6:d38287621cca 36 {1.0,3.0}
miguelangel_2511 6:d38287621cca 37 };
miguelangel_2511 6:d38287621cca 38
miguelangel_2511 6:d38287621cca 39
miguelangel_2511 6:d38287621cca 40 /* Function definition */
miguelangel_2511 6:d38287621cca 41
miguelangel_2511 6:d38287621cca 42 void Nextion_Interface_Initialize(void){
miguelangel_2511 6:d38287621cca 43 /* Configure baud rate */
miguelangel_2511 8:208d965a3bd2 44 nextion_display.baud(9600);
miguelangel_2511 8:208d965a3bd2 45 wait(1);
miguelangel_2511 8:208d965a3bd2 46 nextion_display.printf("baud=%d", NEXTION_DISPLAY_BAUD_RATE);
miguelangel_2511 8:208d965a3bd2 47 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 8:208d965a3bd2 48 wait(1);
miguelangel_2511 7:f4e248182d31 49 nextion_display.baud(NEXTION_DISPLAY_BAUD_RATE);
miguelangel_2511 8:208d965a3bd2 50 wait(1);
miguelangel_2511 8:208d965a3bd2 51
miguelangel_2511 8:208d965a3bd2 52 /* Draw separators for the displayed values */
miguelangel_2511 8:208d965a3bd2 53 nextion_display.printf("line 10,160,190,160,%d", WHITE);
miguelangel_2511 8:208d965a3bd2 54 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 8:208d965a3bd2 55 nextion_display.printf("line 10,320,190,320,%d", WHITE);
miguelangel_2511 8:208d965a3bd2 56 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 8:208d965a3bd2 57 nextion_display.printf("line 610,160,790,160,%d", WHITE);
miguelangel_2511 8:208d965a3bd2 58 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 8:208d965a3bd2 59 nextion_display.printf("line 610,320,790,320,%d", WHITE);
miguelangel_2511 8:208d965a3bd2 60 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 6:d38287621cca 61
miguelangel_2511 6:d38287621cca 62 /* Set font color */
miguelangel_2511 8:208d965a3bd2 63 nextion_display.printf("t1.pco=%d", NORMAL_COLOR);
miguelangel_2511 6:d38287621cca 64 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 8:208d965a3bd2 65 nextion_display.printf("t4.pco=%d", NORMAL_COLOR);
miguelangel_2511 8:208d965a3bd2 66 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 6:d38287621cca 67 nextion_display.printf("t7.pco=%d", NORMAL_COLOR);
miguelangel_2511 6:d38287621cca 68 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 9:95fdcdc0977e 69
miguelangel_2511 6:d38287621cca 70 /* Print default values */
miguelangel_2511 6:d38287621cca 71 Volume_Setpoint_Fix();
miguelangel_2511 6:d38287621cca 72 Resp_Frequency_Fix();
miguelangel_2511 11:5cb7ae8bd831 73 I_E_Ratio_Fix();
miguelangel_2511 11:5cb7ae8bd831 74
miguelangel_2511 11:5cb7ae8bd831 75 /* Print initial measured values */
miguelangel_2511 11:5cb7ae8bd831 76 Volume_Display_Update();
miguelangel_2511 11:5cb7ae8bd831 77 Flow_Display_Update();
miguelangel_2511 11:5cb7ae8bd831 78 Pressure_Display_Update();
miguelangel_2511 6:d38287621cca 79
miguelangel_2511 6:d38287621cca 80 }
miguelangel_2511 6:d38287621cca 81
miguelangel_2511 6:d38287621cca 82
miguelangel_2511 6:d38287621cca 83
miguelangel_2511 6:d38287621cca 84 void Parameter_Selection_Box_Update(void){
miguelangel_2511 6:d38287621cca 85
miguelangel_2511 6:d38287621cca 86 /* Remove the selection box from the previous position */
miguelangel_2511 6:d38287621cca 87 switch(past_parameter_selection_index){
miguelangel_2511 6:d38287621cca 88 case 0:
miguelangel_2511 8:208d965a3bd2 89 nextion_display.printf("t1.pco=%d", NORMAL_COLOR);
miguelangel_2511 6:d38287621cca 90 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 6:d38287621cca 91 break;
miguelangel_2511 6:d38287621cca 92 case 1:
miguelangel_2511 8:208d965a3bd2 93 nextion_display.printf("t4.pco=%d", NORMAL_COLOR);
miguelangel_2511 8:208d965a3bd2 94 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 8:208d965a3bd2 95 break;
miguelangel_2511 8:208d965a3bd2 96 case 2:
miguelangel_2511 6:d38287621cca 97 nextion_display.printf("t7.pco=%d", NORMAL_COLOR);
miguelangel_2511 6:d38287621cca 98 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 6:d38287621cca 99 break;
miguelangel_2511 6:d38287621cca 100 default:
miguelangel_2511 6:d38287621cca 101 break;
miguelangel_2511 11:5cb7ae8bd831 102
miguelangel_2511 6:d38287621cca 103 }
miguelangel_2511 6:d38287621cca 104
miguelangel_2511 6:d38287621cca 105
miguelangel_2511 11:5cb7ae8bd831 106 /* Read pressure sensors if necessary */
miguelangel_2511 11:5cb7ae8bd831 107 if(read_pressure_sensors_flag){
miguelangel_2511 11:5cb7ae8bd831 108 Pressure_Sensors_Read();
miguelangel_2511 11:5cb7ae8bd831 109 Calculate_Flow_From_Pressure();
miguelangel_2511 11:5cb7ae8bd831 110 Calculate_Volume_From_Flow();
miguelangel_2511 11:5cb7ae8bd831 111 read_pressure_sensors_flag = 0;
miguelangel_2511 11:5cb7ae8bd831 112 }
miguelangel_2511 11:5cb7ae8bd831 113
miguelangel_2511 6:d38287621cca 114 /* Draw the selection box in the new position */
miguelangel_2511 6:d38287621cca 115 switch(parameter_selection_index){
miguelangel_2511 6:d38287621cca 116 case 0:
miguelangel_2511 8:208d965a3bd2 117 nextion_display.printf("t1.pco=%d", SELECT_COLOR);
miguelangel_2511 6:d38287621cca 118 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 6:d38287621cca 119 break;
miguelangel_2511 6:d38287621cca 120 case 1:
miguelangel_2511 8:208d965a3bd2 121 nextion_display.printf("t4.pco=%d", SELECT_COLOR);
miguelangel_2511 8:208d965a3bd2 122 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 8:208d965a3bd2 123 break;
miguelangel_2511 8:208d965a3bd2 124 case 2:
miguelangel_2511 6:d38287621cca 125 nextion_display.printf("t7.pco=%d", SELECT_COLOR);
miguelangel_2511 6:d38287621cca 126 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 6:d38287621cca 127 break;
miguelangel_2511 6:d38287621cca 128 default:
miguelangel_2511 6:d38287621cca 129 break;
miguelangel_2511 6:d38287621cca 130 }
miguelangel_2511 11:5cb7ae8bd831 131
miguelangel_2511 11:5cb7ae8bd831 132 /* Read pressure sensors if necessary */
miguelangel_2511 11:5cb7ae8bd831 133 if(read_pressure_sensors_flag){
miguelangel_2511 11:5cb7ae8bd831 134 Pressure_Sensors_Read();
miguelangel_2511 11:5cb7ae8bd831 135 Calculate_Flow_From_Pressure();
miguelangel_2511 11:5cb7ae8bd831 136 Calculate_Volume_From_Flow();
miguelangel_2511 11:5cb7ae8bd831 137 read_pressure_sensors_flag = 0;
miguelangel_2511 11:5cb7ae8bd831 138 }
miguelangel_2511 6:d38287621cca 139
miguelangel_2511 6:d38287621cca 140 }
miguelangel_2511 6:d38287621cca 141
miguelangel_2511 6:d38287621cca 142
miguelangel_2511 6:d38287621cca 143 void Parameter_Selection_Box_Remove(void){
miguelangel_2511 6:d38287621cca 144
miguelangel_2511 6:d38287621cca 145 /* Remove the selection box from the current position */
miguelangel_2511 6:d38287621cca 146
miguelangel_2511 6:d38287621cca 147 switch(parameter_selection_index){
miguelangel_2511 6:d38287621cca 148 case 0:
miguelangel_2511 8:208d965a3bd2 149 nextion_display.printf("t1.pco=%d", NORMAL_COLOR);
miguelangel_2511 6:d38287621cca 150 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 6:d38287621cca 151 break;
miguelangel_2511 6:d38287621cca 152 case 1:
miguelangel_2511 8:208d965a3bd2 153 nextion_display.printf("t4.pco=%d", NORMAL_COLOR);
miguelangel_2511 8:208d965a3bd2 154 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 8:208d965a3bd2 155 break;
miguelangel_2511 8:208d965a3bd2 156 case 2:
miguelangel_2511 6:d38287621cca 157 nextion_display.printf("t7.pco=%d", NORMAL_COLOR);
miguelangel_2511 6:d38287621cca 158 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 6:d38287621cca 159 break;
miguelangel_2511 6:d38287621cca 160 default:
miguelangel_2511 6:d38287621cca 161 break;
miguelangel_2511 6:d38287621cca 162 }
miguelangel_2511 11:5cb7ae8bd831 163
miguelangel_2511 11:5cb7ae8bd831 164 /* Read pressure sensors if necessary */
miguelangel_2511 11:5cb7ae8bd831 165 if(read_pressure_sensors_flag){
miguelangel_2511 11:5cb7ae8bd831 166 Pressure_Sensors_Read();
miguelangel_2511 11:5cb7ae8bd831 167 Calculate_Flow_From_Pressure();
miguelangel_2511 11:5cb7ae8bd831 168 Calculate_Volume_From_Flow();
miguelangel_2511 11:5cb7ae8bd831 169 read_pressure_sensors_flag = 0;
miguelangel_2511 11:5cb7ae8bd831 170 }
miguelangel_2511 6:d38287621cca 171
miguelangel_2511 6:d38287621cca 172 }
miguelangel_2511 6:d38287621cca 173
miguelangel_2511 6:d38287621cca 174
miguelangel_2511 6:d38287621cca 175
miguelangel_2511 6:d38287621cca 176
miguelangel_2511 6:d38287621cca 177 void Volume_Setpoint_Display_Update(void){
miguelangel_2511 6:d38287621cca 178
miguelangel_2511 11:5cb7ae8bd831 179 volume_setpoint_display = VOLUME_SETPOINT_MINIMUM_VALUE + (VOLUME_SETPOINT_STEP*volume_setpoint_index);
miguelangel_2511 6:d38287621cca 180
miguelangel_2511 6:d38287621cca 181 /* Print volume value */
miguelangel_2511 8:208d965a3bd2 182 nextion_display.printf("t1.txt=\"%d\"", volume_setpoint_display);
miguelangel_2511 6:d38287621cca 183 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 11:5cb7ae8bd831 184
miguelangel_2511 11:5cb7ae8bd831 185 /* Read pressure sensors if necessary */
miguelangel_2511 11:5cb7ae8bd831 186 if(read_pressure_sensors_flag){
miguelangel_2511 11:5cb7ae8bd831 187 Pressure_Sensors_Read();
miguelangel_2511 11:5cb7ae8bd831 188 Calculate_Flow_From_Pressure();
miguelangel_2511 11:5cb7ae8bd831 189 Calculate_Volume_From_Flow();
miguelangel_2511 11:5cb7ae8bd831 190 read_pressure_sensors_flag = 0;
miguelangel_2511 11:5cb7ae8bd831 191 }
miguelangel_2511 11:5cb7ae8bd831 192
miguelangel_2511 6:d38287621cca 193 }
miguelangel_2511 6:d38287621cca 194
miguelangel_2511 6:d38287621cca 195
miguelangel_2511 6:d38287621cca 196 void Volume_Setpoint_Fix(void){
miguelangel_2511 6:d38287621cca 197
miguelangel_2511 6:d38287621cca 198 volume_setpoint = volume_setpoint_display;
miguelangel_2511 6:d38287621cca 199 stepper_parameters_update_flag = 1;
miguelangel_2511 6:d38287621cca 200
miguelangel_2511 6:d38287621cca 201 /* Print volume value */
miguelangel_2511 8:208d965a3bd2 202 nextion_display.printf("t1.txt=\"%d\"", volume_setpoint_display);
miguelangel_2511 6:d38287621cca 203 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 11:5cb7ae8bd831 204
miguelangel_2511 11:5cb7ae8bd831 205 /* Read pressure sensors if necessary */
miguelangel_2511 11:5cb7ae8bd831 206 if(read_pressure_sensors_flag){
miguelangel_2511 11:5cb7ae8bd831 207 Pressure_Sensors_Read();
miguelangel_2511 11:5cb7ae8bd831 208 Calculate_Flow_From_Pressure();
miguelangel_2511 11:5cb7ae8bd831 209 Calculate_Volume_From_Flow();
miguelangel_2511 11:5cb7ae8bd831 210 read_pressure_sensors_flag = 0;
miguelangel_2511 11:5cb7ae8bd831 211 }
miguelangel_2511 11:5cb7ae8bd831 212
miguelangel_2511 11:5cb7ae8bd831 213 volume_ml = 0.0;
miguelangel_2511 6:d38287621cca 214 }
miguelangel_2511 6:d38287621cca 215
miguelangel_2511 6:d38287621cca 216
miguelangel_2511 6:d38287621cca 217 void Resp_Frequency_Display_Update(void){
miguelangel_2511 6:d38287621cca 218
miguelangel_2511 6:d38287621cca 219 resp_frequency_display = 10 + resp_frequency_index;
miguelangel_2511 6:d38287621cca 220
miguelangel_2511 6:d38287621cca 221 /* Print frequency value */
miguelangel_2511 8:208d965a3bd2 222 nextion_display.printf("t4.txt=\"%d\"", resp_frequency_display);
miguelangel_2511 6:d38287621cca 223 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 11:5cb7ae8bd831 224
miguelangel_2511 11:5cb7ae8bd831 225 /* Read pressure sensors if necessary */
miguelangel_2511 11:5cb7ae8bd831 226 if(read_pressure_sensors_flag){
miguelangel_2511 11:5cb7ae8bd831 227 Pressure_Sensors_Read();
miguelangel_2511 11:5cb7ae8bd831 228 Calculate_Flow_From_Pressure();
miguelangel_2511 11:5cb7ae8bd831 229 Calculate_Volume_From_Flow();
miguelangel_2511 11:5cb7ae8bd831 230 read_pressure_sensors_flag = 0;
miguelangel_2511 11:5cb7ae8bd831 231 }
miguelangel_2511 11:5cb7ae8bd831 232
miguelangel_2511 6:d38287621cca 233 }
miguelangel_2511 6:d38287621cca 234
miguelangel_2511 6:d38287621cca 235
miguelangel_2511 6:d38287621cca 236 void Resp_Frequency_Fix(void){
miguelangel_2511 6:d38287621cca 237
miguelangel_2511 6:d38287621cca 238 resp_frequency = resp_frequency_display;
miguelangel_2511 6:d38287621cca 239 stepper_parameters_update_flag = 1;
miguelangel_2511 6:d38287621cca 240
miguelangel_2511 6:d38287621cca 241 /* Print frequency value */
miguelangel_2511 8:208d965a3bd2 242 nextion_display.printf("t4.txt=\"%d\"", resp_frequency_display);
miguelangel_2511 6:d38287621cca 243 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 11:5cb7ae8bd831 244
miguelangel_2511 11:5cb7ae8bd831 245 /* Read pressure sensors if necessary */
miguelangel_2511 11:5cb7ae8bd831 246 if(read_pressure_sensors_flag){
miguelangel_2511 11:5cb7ae8bd831 247 Pressure_Sensors_Read();
miguelangel_2511 11:5cb7ae8bd831 248 Calculate_Flow_From_Pressure();
miguelangel_2511 11:5cb7ae8bd831 249 Calculate_Volume_From_Flow();
miguelangel_2511 11:5cb7ae8bd831 250 read_pressure_sensors_flag = 0;
miguelangel_2511 11:5cb7ae8bd831 251 }
miguelangel_2511 11:5cb7ae8bd831 252
miguelangel_2511 6:d38287621cca 253 }
miguelangel_2511 6:d38287621cca 254
miguelangel_2511 6:d38287621cca 255 void I_E_Ratio_Display_Update(void){
miguelangel_2511 6:d38287621cca 256
miguelangel_2511 6:d38287621cca 257 inspiration_time_display = i_e_ratio_display_table[i_e_ratio_index][0];
miguelangel_2511 6:d38287621cca 258 expiration_time_display = i_e_ratio_display_table[i_e_ratio_index][1];
miguelangel_2511 6:d38287621cca 259
miguelangel_2511 6:d38287621cca 260 /* Print i:e ratio value */
miguelangel_2511 8:208d965a3bd2 261 nextion_display.printf("t7.txt=\"%2.1f : %2.1f\"", inspiration_time_display, expiration_time_display);
miguelangel_2511 8:208d965a3bd2 262 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 11:5cb7ae8bd831 263
miguelangel_2511 11:5cb7ae8bd831 264 /* Read pressure sensors if necessary */
miguelangel_2511 11:5cb7ae8bd831 265 if(read_pressure_sensors_flag){
miguelangel_2511 11:5cb7ae8bd831 266 Pressure_Sensors_Read();
miguelangel_2511 11:5cb7ae8bd831 267 Calculate_Flow_From_Pressure();
miguelangel_2511 11:5cb7ae8bd831 268 Calculate_Volume_From_Flow();
miguelangel_2511 11:5cb7ae8bd831 269 read_pressure_sensors_flag = 0;
miguelangel_2511 11:5cb7ae8bd831 270 }
miguelangel_2511 11:5cb7ae8bd831 271
miguelangel_2511 6:d38287621cca 272 }
miguelangel_2511 6:d38287621cca 273
miguelangel_2511 6:d38287621cca 274
miguelangel_2511 6:d38287621cca 275 void I_E_Ratio_Fix(void){
miguelangel_2511 6:d38287621cca 276
miguelangel_2511 6:d38287621cca 277 inspiration_time = inspiration_time_display;
miguelangel_2511 6:d38287621cca 278 expiration_time = expiration_time_display;
miguelangel_2511 6:d38287621cca 279 stepper_parameters_update_flag = 1;
miguelangel_2511 6:d38287621cca 280
miguelangel_2511 6:d38287621cca 281 /* Print i:e ratio value */
miguelangel_2511 8:208d965a3bd2 282 nextion_display.printf("t7.txt=\"%2.1f : %2.1f\"", inspiration_time_display, expiration_time_display);
miguelangel_2511 6:d38287621cca 283 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 11:5cb7ae8bd831 284
miguelangel_2511 11:5cb7ae8bd831 285 /* Read pressure sensors if necessary */
miguelangel_2511 11:5cb7ae8bd831 286 if(read_pressure_sensors_flag){
miguelangel_2511 11:5cb7ae8bd831 287 Pressure_Sensors_Read();
miguelangel_2511 11:5cb7ae8bd831 288 Calculate_Flow_From_Pressure();
miguelangel_2511 11:5cb7ae8bd831 289 Calculate_Volume_From_Flow();
miguelangel_2511 11:5cb7ae8bd831 290 read_pressure_sensors_flag = 0;
miguelangel_2511 11:5cb7ae8bd831 291 }
miguelangel_2511 11:5cb7ae8bd831 292
miguelangel_2511 6:d38287621cca 293 }
miguelangel_2511 7:f4e248182d31 294
miguelangel_2511 11:5cb7ae8bd831 295
miguelangel_2511 8:208d965a3bd2 296 void Volume_Display_Update(void){
miguelangel_2511 9:95fdcdc0977e 297 nextion_display.printf("t11.txt=\"%d\"", (int16_t)volume_ml);
miguelangel_2511 9:95fdcdc0977e 298 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 11:5cb7ae8bd831 299
miguelangel_2511 11:5cb7ae8bd831 300 /* Read pressure sensors if necessary */
miguelangel_2511 11:5cb7ae8bd831 301 if(read_pressure_sensors_flag){
miguelangel_2511 11:5cb7ae8bd831 302 Pressure_Sensors_Read();
miguelangel_2511 11:5cb7ae8bd831 303 Calculate_Flow_From_Pressure();
miguelangel_2511 11:5cb7ae8bd831 304 Calculate_Volume_From_Flow();
miguelangel_2511 11:5cb7ae8bd831 305 read_pressure_sensors_flag = 0;
miguelangel_2511 11:5cb7ae8bd831 306 }
miguelangel_2511 11:5cb7ae8bd831 307
miguelangel_2511 9:95fdcdc0977e 308 }
miguelangel_2511 9:95fdcdc0977e 309
miguelangel_2511 11:5cb7ae8bd831 310
miguelangel_2511 9:95fdcdc0977e 311 void Flow_Display_Update(void){
miguelangel_2511 11:5cb7ae8bd831 312 nextion_display.printf("t14.txt=\"%.2f\"", flow_lpm);
miguelangel_2511 8:208d965a3bd2 313 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 11:5cb7ae8bd831 314
miguelangel_2511 11:5cb7ae8bd831 315 /* Read pressure sensors if necessary */
miguelangel_2511 11:5cb7ae8bd831 316 if(read_pressure_sensors_flag){
miguelangel_2511 11:5cb7ae8bd831 317 Pressure_Sensors_Read();
miguelangel_2511 11:5cb7ae8bd831 318 Calculate_Flow_From_Pressure();
miguelangel_2511 11:5cb7ae8bd831 319 Calculate_Volume_From_Flow();
miguelangel_2511 11:5cb7ae8bd831 320 read_pressure_sensors_flag = 0;
miguelangel_2511 11:5cb7ae8bd831 321 }
miguelangel_2511 11:5cb7ae8bd831 322
miguelangel_2511 8:208d965a3bd2 323 }
miguelangel_2511 8:208d965a3bd2 324
miguelangel_2511 8:208d965a3bd2 325 void Pressure_Display_Update(void){
miguelangel_2511 11:5cb7ae8bd831 326 nextion_display.printf("t15.txt=\"%d\"", (int16_t)(pressure_02_psi * PSI_TO_CMH2O_CONSTANT));
miguelangel_2511 8:208d965a3bd2 327 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 11:5cb7ae8bd831 328
miguelangel_2511 11:5cb7ae8bd831 329 /* Read pressure sensors if necessary */
miguelangel_2511 11:5cb7ae8bd831 330 if(read_pressure_sensors_flag){
miguelangel_2511 11:5cb7ae8bd831 331 Pressure_Sensors_Read();
miguelangel_2511 11:5cb7ae8bd831 332 Calculate_Flow_From_Pressure();
miguelangel_2511 11:5cb7ae8bd831 333 Calculate_Volume_From_Flow();
miguelangel_2511 11:5cb7ae8bd831 334 read_pressure_sensors_flag = 0;
miguelangel_2511 11:5cb7ae8bd831 335 }
miguelangel_2511 11:5cb7ae8bd831 336
miguelangel_2511 8:208d965a3bd2 337 }
miguelangel_2511 8:208d965a3bd2 338
miguelangel_2511 8:208d965a3bd2 339
miguelangel_2511 8:208d965a3bd2 340 void Nextion_Plot_Volume_Waveform(void){
miguelangel_2511 8:208d965a3bd2 341
miguelangel_2511 8:208d965a3bd2 342 static uint16_t x_pos_counter = 1, prev_y_pos = (VOLUME_WAVEFORM_Y0 + VOLUME_WAVEFORM_HEIGHT - 1);
miguelangel_2511 8:208d965a3bd2 343 int16_t x_pos, y_pos;
miguelangel_2511 8:208d965a3bd2 344 uint16_t volume_scaled_value;
miguelangel_2511 8:208d965a3bd2 345
miguelangel_2511 11:5cb7ae8bd831 346 volume_scaled_value = VOLUME_WAVEFORM_OFFSET + (int16_t)(volume_ml * VOLUME_WAVEFORM_GAIN);
miguelangel_2511 8:208d965a3bd2 347
miguelangel_2511 11:5cb7ae8bd831 348 x_pos_counter = x_pos_counter + 1;
miguelangel_2511 8:208d965a3bd2 349
miguelangel_2511 8:208d965a3bd2 350 if(x_pos_counter >= VOLUME_WAVEFORM_WIDTH){
miguelangel_2511 11:5cb7ae8bd831 351 nextion_display.printf("fill %d,%d,%d,%d,%d",VOLUME_WAVEFORM_X0,VOLUME_WAVEFORM_Y0,VOLUME_WAVEFORM_WIDTH,VOLUME_WAVEFORM_HEIGHT,WAVEFORM_BACKGROUND_COLOR);
miguelangel_2511 8:208d965a3bd2 352 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 8:208d965a3bd2 353 x_pos_counter = 1;
miguelangel_2511 11:5cb7ae8bd831 354
miguelangel_2511 11:5cb7ae8bd831 355 /* Read pressure sensors if necessary */
miguelangel_2511 11:5cb7ae8bd831 356 if(read_pressure_sensors_flag){
miguelangel_2511 11:5cb7ae8bd831 357 Pressure_Sensors_Read();
miguelangel_2511 11:5cb7ae8bd831 358 Calculate_Flow_From_Pressure();
miguelangel_2511 11:5cb7ae8bd831 359 Calculate_Volume_From_Flow();
miguelangel_2511 11:5cb7ae8bd831 360 read_pressure_sensors_flag = 0;
miguelangel_2511 11:5cb7ae8bd831 361 }
miguelangel_2511 11:5cb7ae8bd831 362
miguelangel_2511 8:208d965a3bd2 363 }
miguelangel_2511 8:208d965a3bd2 364
miguelangel_2511 8:208d965a3bd2 365 x_pos = VOLUME_WAVEFORM_X0 + x_pos_counter;
miguelangel_2511 8:208d965a3bd2 366 y_pos = VOLUME_WAVEFORM_Y0 + VOLUME_WAVEFORM_HEIGHT - volume_scaled_value - 1;
miguelangel_2511 8:208d965a3bd2 367
miguelangel_2511 8:208d965a3bd2 368 if(y_pos <= VOLUME_WAVEFORM_Y0){
miguelangel_2511 8:208d965a3bd2 369 y_pos = VOLUME_WAVEFORM_Y0 + 1;
miguelangel_2511 10:b2d87404309a 370 }else if(y_pos >= (VOLUME_WAVEFORM_Y0 + VOLUME_WAVEFORM_HEIGHT)){
miguelangel_2511 10:b2d87404309a 371 y_pos = VOLUME_WAVEFORM_Y0 + VOLUME_WAVEFORM_HEIGHT - 1;
miguelangel_2511 8:208d965a3bd2 372 }
miguelangel_2511 8:208d965a3bd2 373
miguelangel_2511 8:208d965a3bd2 374 nextion_display.printf("line %d,%d,%d,%d,%d",(x_pos - 1), prev_y_pos, x_pos, y_pos, GREEN);
miguelangel_2511 7:f4e248182d31 375 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 11:5cb7ae8bd831 376
miguelangel_2511 8:208d965a3bd2 377 prev_y_pos = y_pos;
miguelangel_2511 11:5cb7ae8bd831 378
miguelangel_2511 11:5cb7ae8bd831 379 /* Read pressure sensors if necessary */
miguelangel_2511 11:5cb7ae8bd831 380 if(read_pressure_sensors_flag){
miguelangel_2511 11:5cb7ae8bd831 381 Pressure_Sensors_Read();
miguelangel_2511 11:5cb7ae8bd831 382 Calculate_Flow_From_Pressure();
miguelangel_2511 11:5cb7ae8bd831 383 Calculate_Volume_From_Flow();
miguelangel_2511 11:5cb7ae8bd831 384 read_pressure_sensors_flag = 0;
miguelangel_2511 11:5cb7ae8bd831 385 }
miguelangel_2511 11:5cb7ae8bd831 386
miguelangel_2511 7:f4e248182d31 387 }
miguelangel_2511 7:f4e248182d31 388
miguelangel_2511 8:208d965a3bd2 389
miguelangel_2511 8:208d965a3bd2 390 void Nextion_Plot_Flow_Waveform(void){
miguelangel_2511 8:208d965a3bd2 391
miguelangel_2511 8:208d965a3bd2 392 static uint16_t x_pos_counter = 1, prev_y_pos = (FLOW_WAVEFORM_Y0 + FLOW_WAVEFORM_HEIGHT - 1);
miguelangel_2511 8:208d965a3bd2 393 uint16_t x_pos, y_pos;
miguelangel_2511 8:208d965a3bd2 394 uint16_t flow_scaled_value;
miguelangel_2511 8:208d965a3bd2 395
miguelangel_2511 11:5cb7ae8bd831 396 flow_scaled_value = FLOW_WAVEFORM_OFFSET + (int16_t)(flow_lpm*FLOW_WAVEFORM_GAIN);
miguelangel_2511 8:208d965a3bd2 397
miguelangel_2511 11:5cb7ae8bd831 398 x_pos_counter = x_pos_counter + 1;
miguelangel_2511 8:208d965a3bd2 399
miguelangel_2511 8:208d965a3bd2 400 if(x_pos_counter >= FLOW_WAVEFORM_WIDTH){
miguelangel_2511 11:5cb7ae8bd831 401 nextion_display.printf("fill %d,%d,%d,%d,%d",FLOW_WAVEFORM_X0,FLOW_WAVEFORM_Y0,FLOW_WAVEFORM_WIDTH,FLOW_WAVEFORM_HEIGHT,WAVEFORM_BACKGROUND_COLOR);
miguelangel_2511 8:208d965a3bd2 402 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 8:208d965a3bd2 403 x_pos_counter = 1;
miguelangel_2511 11:5cb7ae8bd831 404
miguelangel_2511 11:5cb7ae8bd831 405 /* Read pressure sensors if necessary */
miguelangel_2511 11:5cb7ae8bd831 406 if(read_pressure_sensors_flag){
miguelangel_2511 11:5cb7ae8bd831 407 Pressure_Sensors_Read();
miguelangel_2511 11:5cb7ae8bd831 408 Calculate_Flow_From_Pressure();
miguelangel_2511 11:5cb7ae8bd831 409 Calculate_Volume_From_Flow();
miguelangel_2511 11:5cb7ae8bd831 410 read_pressure_sensors_flag = 0;
miguelangel_2511 11:5cb7ae8bd831 411 }
miguelangel_2511 11:5cb7ae8bd831 412
miguelangel_2511 8:208d965a3bd2 413 }
miguelangel_2511 8:208d965a3bd2 414
miguelangel_2511 8:208d965a3bd2 415 x_pos = FLOW_WAVEFORM_X0 + x_pos_counter;
miguelangel_2511 8:208d965a3bd2 416 y_pos = FLOW_WAVEFORM_Y0 + FLOW_WAVEFORM_HEIGHT - flow_scaled_value - 1;
miguelangel_2511 8:208d965a3bd2 417
miguelangel_2511 8:208d965a3bd2 418
miguelangel_2511 8:208d965a3bd2 419 if(y_pos <= FLOW_WAVEFORM_Y0){
miguelangel_2511 10:b2d87404309a 420 y_pos = FLOW_WAVEFORM_Y0 + 1;
miguelangel_2511 8:208d965a3bd2 421 }else if(y_pos >= (FLOW_WAVEFORM_Y0 + FLOW_WAVEFORM_HEIGHT)){
miguelangel_2511 10:b2d87404309a 422 y_pos = FLOW_WAVEFORM_Y0 + FLOW_WAVEFORM_HEIGHT - 1;
miguelangel_2511 8:208d965a3bd2 423
miguelangel_2511 8:208d965a3bd2 424 }
miguelangel_2511 8:208d965a3bd2 425
miguelangel_2511 8:208d965a3bd2 426 nextion_display.printf("line %d,%d,%d,%d,%d",(x_pos - 1), prev_y_pos, x_pos, y_pos, YELLOW);
miguelangel_2511 7:f4e248182d31 427 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 11:5cb7ae8bd831 428
miguelangel_2511 11:5cb7ae8bd831 429 prev_y_pos = y_pos;
miguelangel_2511 8:208d965a3bd2 430
miguelangel_2511 11:5cb7ae8bd831 431 /* Read pressure sensors if necessary */
miguelangel_2511 11:5cb7ae8bd831 432 if(read_pressure_sensors_flag){
miguelangel_2511 11:5cb7ae8bd831 433 Pressure_Sensors_Read();
miguelangel_2511 11:5cb7ae8bd831 434 Calculate_Flow_From_Pressure();
miguelangel_2511 11:5cb7ae8bd831 435 Calculate_Volume_From_Flow();
miguelangel_2511 11:5cb7ae8bd831 436 read_pressure_sensors_flag = 0;
miguelangel_2511 11:5cb7ae8bd831 437 }
miguelangel_2511 11:5cb7ae8bd831 438
miguelangel_2511 8:208d965a3bd2 439 }
miguelangel_2511 8:208d965a3bd2 440
miguelangel_2511 8:208d965a3bd2 441
miguelangel_2511 8:208d965a3bd2 442 void Nextion_Plot_Pressure_Waveform(void){
miguelangel_2511 8:208d965a3bd2 443
miguelangel_2511 8:208d965a3bd2 444 static uint16_t x_pos_counter = 1, prev_y_pos = (PRESSURE_WAVEFORM_Y0 + PRESSURE_WAVEFORM_HEIGHT - 1);
miguelangel_2511 8:208d965a3bd2 445 uint16_t x_pos, y_pos;
miguelangel_2511 8:208d965a3bd2 446 uint16_t pressure_02_scaled_value;
miguelangel_2511 8:208d965a3bd2 447
miguelangel_2511 11:5cb7ae8bd831 448 pressure_02_scaled_value = PRESSURE_WAVEFORM_OFFSET + (uint16_t)(pressure_02_psi * PRESSURE_WAVEFORM_GAIN) ;
miguelangel_2511 8:208d965a3bd2 449
miguelangel_2511 11:5cb7ae8bd831 450 x_pos_counter = x_pos_counter + 1;
miguelangel_2511 8:208d965a3bd2 451
miguelangel_2511 8:208d965a3bd2 452 if(x_pos_counter >= PRESSURE_WAVEFORM_WIDTH){
miguelangel_2511 11:5cb7ae8bd831 453 nextion_display.printf("fill %d,%d,%d,%d,%d",PRESSURE_WAVEFORM_X0,PRESSURE_WAVEFORM_Y0,PRESSURE_WAVEFORM_WIDTH,PRESSURE_WAVEFORM_HEIGHT,WAVEFORM_BACKGROUND_COLOR);
miguelangel_2511 8:208d965a3bd2 454 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 8:208d965a3bd2 455 x_pos_counter = 1;
miguelangel_2511 11:5cb7ae8bd831 456
miguelangel_2511 11:5cb7ae8bd831 457 /* Read pressure sensors if necessary */
miguelangel_2511 11:5cb7ae8bd831 458 if(read_pressure_sensors_flag){
miguelangel_2511 11:5cb7ae8bd831 459 Pressure_Sensors_Read();
miguelangel_2511 11:5cb7ae8bd831 460 Calculate_Flow_From_Pressure();
miguelangel_2511 11:5cb7ae8bd831 461 Calculate_Volume_From_Flow();
miguelangel_2511 11:5cb7ae8bd831 462 read_pressure_sensors_flag = 0;
miguelangel_2511 11:5cb7ae8bd831 463 }
miguelangel_2511 11:5cb7ae8bd831 464
miguelangel_2511 8:208d965a3bd2 465 }
miguelangel_2511 8:208d965a3bd2 466
miguelangel_2511 8:208d965a3bd2 467 x_pos = PRESSURE_WAVEFORM_X0 + x_pos_counter;
miguelangel_2511 8:208d965a3bd2 468 y_pos = PRESSURE_WAVEFORM_Y0 + PRESSURE_WAVEFORM_HEIGHT - pressure_02_scaled_value - 1;
miguelangel_2511 8:208d965a3bd2 469
miguelangel_2511 8:208d965a3bd2 470
miguelangel_2511 8:208d965a3bd2 471 if(y_pos <= PRESSURE_WAVEFORM_Y0){
miguelangel_2511 8:208d965a3bd2 472 y_pos = PRESSURE_WAVEFORM_Y0 + 1;
miguelangel_2511 8:208d965a3bd2 473 }
miguelangel_2511 8:208d965a3bd2 474
miguelangel_2511 8:208d965a3bd2 475 nextion_display.printf("line %d,%d,%d,%d,%d",(x_pos - 1), prev_y_pos, x_pos, y_pos, WHITE);
miguelangel_2511 8:208d965a3bd2 476 nextion_display.printf("%c%c%c", 0xff, 0xff, 0xff);
miguelangel_2511 8:208d965a3bd2 477
miguelangel_2511 11:5cb7ae8bd831 478 prev_y_pos = y_pos;
miguelangel_2511 11:5cb7ae8bd831 479
miguelangel_2511 11:5cb7ae8bd831 480 /* Read pressure sensors if necessary */
miguelangel_2511 11:5cb7ae8bd831 481 if(read_pressure_sensors_flag){
miguelangel_2511 11:5cb7ae8bd831 482 Pressure_Sensors_Read();
miguelangel_2511 11:5cb7ae8bd831 483 Calculate_Flow_From_Pressure();
miguelangel_2511 11:5cb7ae8bd831 484 Calculate_Volume_From_Flow();
miguelangel_2511 11:5cb7ae8bd831 485 read_pressure_sensors_flag = 0;
miguelangel_2511 11:5cb7ae8bd831 486 }
miguelangel_2511 11:5cb7ae8bd831 487
miguelangel_2511 8:208d965a3bd2 488 }
miguelangel_2511 8:208d965a3bd2 489