para el ventilador

Dependencies:   QEI FastPWM

Committer:
miguelangelpachas
Date:
Fri May 15 20:40:44 2020 +0000
Revision:
13:e0a6033cb39d
Parent:
12:3bc2465b034a
para el ventilador

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