mbed-os github
Dependencies: ADS1015 Faulhaber HTU21D_mod MS5837_potless Sensor_Head_RevB_3 USBDevice_dfu Utilsdfu beep
Fork of ARNSRS_testDFU by
main.cpp@15:efd3b3bf3f37, 2017-11-25 (annotated)
- Committer:
- POTLESS_2
- Date:
- Sat Nov 25 16:22:38 2017 +0000
- Revision:
- 15:efd3b3bf3f37
- Parent:
- 14:b5e0e882205e
- Child:
- 16:917656586772
A tester...; ; Modification du thread pour enlever la fabrication des chaines a enregistrer et pour android.; En commentaire les r?glages possible de priorit? des thread ? tester.; Ajout de l'enregistrement des param du PID.;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
potless | 1:bef7856b5c0a | 1 | #include "mbed.h" |
potless | 2:4a8bf1d53439 | 2 | #include <string> |
POTLESS_2 | 7:ad15c386e960 | 3 | #include "Sensor_head_revB.h" |
POTLESS_2 | 8:a750d531b381 | 4 | #include "HTU21D.h" |
POTLESS_2 | 12:7f3aadd79f89 | 5 | #include "PID.h" |
POTLESS_2 | 4:d84250f67dec | 6 | |
POTLESS_2 | 10:aca745a66d51 | 7 | //Commandes des servos |
POTLESS_2 | 10:aca745a66d51 | 8 | #define PWM_SERVO_POUMON PB_15 |
POTLESS_2 | 10:aca745a66d51 | 9 | #define PWM_SERVO_FUITE PB_1 |
POTLESS_2 | 10:aca745a66d51 | 10 | //Retour des servos |
POTLESS_2 | 10:aca745a66d51 | 11 | #define FEED_BACK_SERVO_POUMON PC_2 |
POTLESS_2 | 10:aca745a66d51 | 12 | #define FEED_BACK_SERVO_FUITE PC_3 |
POTLESS_2 | 9:04bfdfc029cb | 13 | |
POTLESS_2 | 9:04bfdfc029cb | 14 | //Ecrit dans le moniteur série de la tablette à 9600 bds si sur 1, penser à mettre NEED_CONSOLE_OUTPUT à 0 |
POTLESS_2 | 9:04bfdfc029cb | 15 | #define NEED_ANDROID_OUTPUT 1 |
POTLESS_2 | 9:04bfdfc029cb | 16 | |
POTLESS_2 | 10:aca745a66d51 | 17 | //Sortie en mode VT100, à commenter si on veut une sortie type Arduino |
POTLESS_2 | 10:aca745a66d51 | 18 | //#define VT100 |
POTLESS_2 | 9:04bfdfc029cb | 19 | |
POTLESS_2 | 12:7f3aadd79f89 | 20 | //Mode PID, STD et DELTA, à commenter / décommenter |
POTLESS_2 | 12:7f3aadd79f89 | 21 | //#define STD_MODE |
POTLESS_2 | 12:7f3aadd79f89 | 22 | #define PID_MODE |
POTLESS_2 | 11:b2feed92584a | 23 | //#define DELTA_MODE |
POTLESS_2 | 12:7f3aadd79f89 | 24 | |
POTLESS_2 | 11:b2feed92584a | 25 | float delta = 0.0f; |
POTLESS_2 | 11:b2feed92584a | 26 | |
POTLESS_2 | 12:7f3aadd79f89 | 27 | #ifdef STD_MODE |
POTLESS_2 | 12:7f3aadd79f89 | 28 | int MODE_FLAG = 0; |
POTLESS_2 | 11:b2feed92584a | 29 | #endif |
POTLESS_2 | 11:b2feed92584a | 30 | |
POTLESS_2 | 11:b2feed92584a | 31 | #ifdef DELTA_MODE |
POTLESS_2 | 12:7f3aadd79f89 | 32 | int MODE_FLAG = 1; |
POTLESS_2 | 12:7f3aadd79f89 | 33 | #endif |
POTLESS_2 | 12:7f3aadd79f89 | 34 | |
POTLESS_2 | 12:7f3aadd79f89 | 35 | #ifdef PID_MODE |
POTLESS_2 | 12:7f3aadd79f89 | 36 | int MODE_FLAG = 2; |
POTLESS_2 | 11:b2feed92584a | 37 | #endif |
POTLESS_2 | 11:b2feed92584a | 38 | |
POTLESS_2 | 9:04bfdfc029cb | 39 | #if NEED_ANDROID_OUTPUT |
POTLESS_2 | 9:04bfdfc029cb | 40 | #define ANDROID(...) { android.printf(__VA_ARGS__); } |
POTLESS_2 | 9:04bfdfc029cb | 41 | #else |
POTLESS_2 | 9:04bfdfc029cb | 42 | #define ANDROID(...) |
POTLESS_2 | 9:04bfdfc029cb | 43 | #endif |
POTLESS_2 | 9:04bfdfc029cb | 44 | |
POTLESS_2 | 7:ad15c386e960 | 45 | //Moniteur série |
POTLESS_2 | 9:04bfdfc029cb | 46 | Serial serialMonit(USBTX,USBRX,9600); |
POTLESS_2 | 10:aca745a66d51 | 47 | |
POTLESS_2 | 9:04bfdfc029cb | 48 | //COM Série vers Android, Serial 3 |
POTLESS_2 | 9:04bfdfc029cb | 49 | Serial android(PC_10,PC_11,9600); |
POTLESS_2 | 4:d84250f67dec | 50 | |
POTLESS_2 | 7:ad15c386e960 | 51 | //Init de la lib ARNSRS; |
POTLESS_2 | 7:ad15c386e960 | 52 | SENSOR_HEAD_REV_B sensors; |
potless | 2:4a8bf1d53439 | 53 | |
POTLESS_2 | 6:ebed9093d661 | 54 | //pour Param Cozir |
POTLESS_2 | 9:04bfdfc029cb | 55 | const int sizeParam = 20; |
POTLESS_2 | 11:b2feed92584a | 56 | char param[sizeParam]; |
POTLESS_2 | 11:b2feed92584a | 57 | volatile int indexParam = 0; |
POTLESS_2 | 6:ebed9093d661 | 58 | bool newParamFlag = false; |
potless | 2:4a8bf1d53439 | 59 | |
POTLESS_2 | 9:04bfdfc029cb | 60 | //pour Commandes Android |
POTLESS_2 | 9:04bfdfc029cb | 61 | const int sizeAndroid = 20; |
POTLESS_2 | 11:b2feed92584a | 62 | char Android[sizeAndroid]; |
POTLESS_2 | 11:b2feed92584a | 63 | volatile int indexAndroid = 0; |
POTLESS_2 | 9:04bfdfc029cb | 64 | bool newAndroidFlag = false; |
POTLESS_2 | 12:7f3aadd79f89 | 65 | char to_android[100]; |
POTLESS_2 | 9:04bfdfc029cb | 66 | |
POTLESS_2 | 7:ad15c386e960 | 67 | //Variables de stockage des infos capteurs |
POTLESS_2 | 7:ad15c386e960 | 68 | int co2 = 0; |
POTLESS_2 | 7:ad15c386e960 | 69 | float pression = 0; |
POTLESS_2 | 9:04bfdfc029cb | 70 | float Temp1 = 0; |
POTLESS_2 | 7:ad15c386e960 | 71 | int ppO2 = 0; |
POTLESS_2 | 7:ad15c386e960 | 72 | int CellO2_1 = 0; |
POTLESS_2 | 7:ad15c386e960 | 73 | int CellO2_2 = 0; |
POTLESS_2 | 7:ad15c386e960 | 74 | |
POTLESS_2 | 7:ad15c386e960 | 75 | //Mesure du tempsd'éxecution du loop |
POTLESS_2 | 7:ad15c386e960 | 76 | Timer REAL_RATE; |
POTLESS_2 | 7:ad15c386e960 | 77 | float RATE = 0; |
POTLESS_2 | 11:b2feed92584a | 78 | float RATE_TRUE = 0; |
POTLESS_2 | 12:7f3aadd79f89 | 79 | float Ref_Time = 1.0; //La durée de la boucle désirée... |
POTLESS_2 | 7:ad15c386e960 | 80 | |
POTLESS_2 | 8:a750d531b381 | 81 | //HTU21D |
POTLESS_2 | 8:a750d531b381 | 82 | HTU21D temphumid(PB_9, PB_8); //Temp humid sensor || SDA, SCL |
POTLESS_2 | 9:04bfdfc029cb | 83 | float Temp2; |
POTLESS_2 | 9:04bfdfc029cb | 84 | int Humid; |
POTLESS_2 | 9:04bfdfc029cb | 85 | |
POTLESS_2 | 9:04bfdfc029cb | 86 | //Data LOG |
POTLESS_2 | 9:04bfdfc029cb | 87 | char to_store[50]; |
POTLESS_2 | 9:04bfdfc029cb | 88 | time_t seconds; |
POTLESS_2 | 8:a750d531b381 | 89 | |
POTLESS_2 | 8:a750d531b381 | 90 | //VT100 |
POTLESS_2 | 8:a750d531b381 | 91 | static const char CLS[] = "\x1B[2J"; |
POTLESS_2 | 8:a750d531b381 | 92 | static const char HOME[] = "\x1B[H"; |
POTLESS_2 | 8:a750d531b381 | 93 | |
POTLESS_2 | 7:ad15c386e960 | 94 | //Thread d'intérogation des capteurs |
POTLESS_2 | 7:ad15c386e960 | 95 | Thread thread; |
POTLESS_2 | 7:ad15c386e960 | 96 | |
POTLESS_2 | 10:aca745a66d51 | 97 | //Contrôle des servos |
POTLESS_2 | 10:aca745a66d51 | 98 | PwmOut servo_poumon(PWM_SERVO_POUMON); |
POTLESS_2 | 10:aca745a66d51 | 99 | AnalogIn FeedBack_Servo_Poumon(FEED_BACK_SERVO_POUMON); |
POTLESS_2 | 10:aca745a66d51 | 100 | float volet_poumon_Position; |
POTLESS_2 | 10:aca745a66d51 | 101 | float Limit_min_Servo_Poumon, Limit_max_Servo_Poumon; |
POTLESS_2 | 10:aca745a66d51 | 102 | float Delta_FB_1; |
POTLESS_2 | 10:aca745a66d51 | 103 | |
POTLESS_2 | 10:aca745a66d51 | 104 | PwmOut servo_fuite(PWM_SERVO_FUITE); |
POTLESS_2 | 10:aca745a66d51 | 105 | AnalogIn FeedBack_Servo_Fuite(FEED_BACK_SERVO_FUITE); |
POTLESS_2 | 10:aca745a66d51 | 106 | float volet_fuite_Position; |
POTLESS_2 | 10:aca745a66d51 | 107 | float Limit_min_Servo_Fuite, Limit_max_Servo_Fuite; |
POTLESS_2 | 10:aca745a66d51 | 108 | float Delta_FB_2; |
POTLESS_2 | 10:aca745a66d51 | 109 | |
POTLESS_2 | 12:7f3aadd79f89 | 110 | #ifdef PID_MODE |
POTLESS_2 | 12:7f3aadd79f89 | 111 | //Paramètre du PID |
POTLESS_2 | 12:7f3aadd79f89 | 112 | float Kc = 40; |
POTLESS_2 | 12:7f3aadd79f89 | 113 | float Ti = 0; |
POTLESS_2 | 12:7f3aadd79f89 | 114 | float Td = 0; |
POTLESS_2 | 12:7f3aadd79f89 | 115 | float RATE_PID = Ref_Time; |
POTLESS_2 | 12:7f3aadd79f89 | 116 | float Commande_PID; |
POTLESS_2 | 15:efd3b3bf3f37 | 117 | float consigne = 210; |
POTLESS_2 | 15:efd3b3bf3f37 | 118 | float Max_Input = 1000; |
POTLESS_2 | 15:efd3b3bf3f37 | 119 | float Min_Input = 80; |
POTLESS_2 | 15:efd3b3bf3f37 | 120 | float Max_Output = 1;//Vérifier la valeur pour angle à laisser ouvert... |
POTLESS_2 | 15:efd3b3bf3f37 | 121 | float Min_Output = 0; |
POTLESS_2 | 10:aca745a66d51 | 122 | |
POTLESS_2 | 12:7f3aadd79f89 | 123 | //Init PID |
POTLESS_2 | 12:7f3aadd79f89 | 124 | PID control_Servo(Kc, Ti, Td, RATE_PID);//Kc, Ti, Td, interval |
POTLESS_2 | 12:7f3aadd79f89 | 125 | #endif |
POTLESS_2 | 10:aca745a66d51 | 126 | |
POTLESS_2 | 10:aca745a66d51 | 127 | //Remap d'une valeur |
POTLESS_2 | 10:aca745a66d51 | 128 | float remap(float x, float in_min, float in_max, float out_min, float out_max) |
POTLESS_2 | 10:aca745a66d51 | 129 | { |
POTLESS_2 | 10:aca745a66d51 | 130 | return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; |
POTLESS_2 | 10:aca745a66d51 | 131 | } |
POTLESS_2 | 10:aca745a66d51 | 132 | |
POTLESS_2 | 10:aca745a66d51 | 133 | |
POTLESS_2 | 12:7f3aadd79f89 | 134 | //Thread d'intérogation des capteurs, positions servo et constitution de la chaine |
POTLESS_2 | 10:aca745a66d51 | 135 | void Get_Info_thread() |
POTLESS_2 | 6:ebed9093d661 | 136 | { |
POTLESS_2 | 7:ad15c386e960 | 137 | while (true) { |
POTLESS_2 | 7:ad15c386e960 | 138 | |
POTLESS_2 | 7:ad15c386e960 | 139 | //CO2 sur Cozir |
POTLESS_2 | 7:ad15c386e960 | 140 | co2 = sensors.requestCO2(); |
POTLESS_2 | 7:ad15c386e960 | 141 | //P / T sur MS5837 |
POTLESS_2 | 7:ad15c386e960 | 142 | pression = sensors.requestPress(); |
POTLESS_2 | 9:04bfdfc029cb | 143 | Temp1 = sensors.requestTemp(); |
POTLESS_2 | 7:ad15c386e960 | 144 | //PPO2 sur ADS1015 |
POTLESS_2 | 7:ad15c386e960 | 145 | ppO2 = sensors.requestPpO2(); |
POTLESS_2 | 7:ad15c386e960 | 146 | //Cell O2 en mV |
POTLESS_2 | 7:ad15c386e960 | 147 | CellO2_1 = sensors.requestCellO2_1(); |
POTLESS_2 | 7:ad15c386e960 | 148 | CellO2_2 = sensors.requestCellO2_2(); |
POTLESS_2 | 9:04bfdfc029cb | 149 | |
POTLESS_2 | 8:a750d531b381 | 150 | //HTU21D |
POTLESS_2 | 9:04bfdfc029cb | 151 | Temp2 = temphumid.sample_ctemp(); |
POTLESS_2 | 9:04bfdfc029cb | 152 | Humid = temphumid.sample_humid(); |
POTLESS_2 | 9:04bfdfc029cb | 153 | |
POTLESS_2 | 10:aca745a66d51 | 154 | //Retour position des servos |
POTLESS_2 | 10:aca745a66d51 | 155 | volet_poumon_Position = 90 - remap(FeedBack_Servo_Poumon, Limit_max_Servo_Poumon, Limit_min_Servo_Poumon, 0, 90); |
POTLESS_2 | 10:aca745a66d51 | 156 | volet_fuite_Position = remap(FeedBack_Servo_Fuite, Limit_max_Servo_Fuite, Limit_min_Servo_Fuite, 0, 90); |
POTLESS_2 | 12:7f3aadd79f89 | 157 | |
POTLESS_2 | 15:efd3b3bf3f37 | 158 | } |
potless | 2:4a8bf1d53439 | 159 | } |
POTLESS_2 | 4:d84250f67dec | 160 | |
POTLESS_2 | 7:ad15c386e960 | 161 | void Affichage_moniteur() |
POTLESS_2 | 4:d84250f67dec | 162 | { |
POTLESS_2 | 12:7f3aadd79f89 | 163 | #ifndef VT100 |
POTLESS_2 | 9:04bfdfc029cb | 164 | printf("\r\n"); |
POTLESS_2 | 9:04bfdfc029cb | 165 | printf(" CO2 = %d ppm\r\n" , co2); |
POTLESS_2 | 9:04bfdfc029cb | 166 | printf(" PPO2 = %d mb\r\n", ppO2); |
POTLESS_2 | 9:04bfdfc029cb | 167 | printf(" Pression = %f msw\r\n", pression); |
POTLESS_2 | 10:aca745a66d51 | 168 | printf(" Temp MS5837 = %f C\r\n", Temp1); |
POTLESS_2 | 10:aca745a66d51 | 169 | printf(" Temp HTU21D = %f C\n\r", Temp2); |
POTLESS_2 | 9:04bfdfc029cb | 170 | printf(" Humidity = %d %%\n\r", Humid); |
POTLESS_2 | 8:a750d531b381 | 171 | printf("\n\r"); |
POTLESS_2 | 8:a750d531b381 | 172 | printf(" Cell O2 n 1 = %d\r\n" , CellO2_1); |
POTLESS_2 | 8:a750d531b381 | 173 | printf(" Cell O2 n 2 = %d\r\n" , CellO2_2); |
POTLESS_2 | 7:ad15c386e960 | 174 | printf("\r\n"); |
POTLESS_2 | 9:04bfdfc029cb | 175 | printf("\n"); |
POTLESS_2 | 10:aca745a66d51 | 176 | printf(" Volet Poumon = %3.2f%\r\n" , volet_poumon_Position); |
POTLESS_2 | 10:aca745a66d51 | 177 | printf(" Volet Fuite = %3.2f%\r\n" , volet_fuite_Position); |
POTLESS_2 | 10:aca745a66d51 | 178 | printf("\r\n"); |
POTLESS_2 | 12:7f3aadd79f89 | 179 | printf("Temps d execution de la boucle = %f seconde(s)\n", (RATE + RATE_TRUE / 1000)); |
POTLESS_2 | 9:04bfdfc029cb | 180 | printf("\r\n", ""); |
POTLESS_2 | 9:04bfdfc029cb | 181 | printf("A enregistrer = %s\n", to_store); |
POTLESS_2 | 9:04bfdfc029cb | 182 | printf("\r\n"); |
POTLESS_2 | 10:aca745a66d51 | 183 | #endif |
POTLESS_2 | 9:04bfdfc029cb | 184 | |
POTLESS_2 | 12:7f3aadd79f89 | 185 | #ifdef VT100 |
POTLESS_2 | 8:a750d531b381 | 186 | printf(HOME); |
POTLESS_2 | 8:a750d531b381 | 187 | printf("\x1b[30m"); |
POTLESS_2 | 9:04bfdfc029cb | 188 | printf("\x1b[0m\r CO2 = \x1b[1m\x1b[K%d ppm\n", co2); |
POTLESS_2 | 9:04bfdfc029cb | 189 | printf("\x1b[0m\r PPO2 = \x1b[1m\x1b[K%d mb\n", ppO2); |
POTLESS_2 | 9:04bfdfc029cb | 190 | printf("\n"); |
POTLESS_2 | 9:04bfdfc029cb | 191 | printf("\x1b[0m\r Pression = \x1b[1m\x1b[K%.2f msw\n", pression); |
POTLESS_2 | 9:04bfdfc029cb | 192 | printf("\n"); |
POTLESS_2 | 10:aca745a66d51 | 193 | printf("\x1b[0m\r Temp MS5837 = \x1b[1m\x1b[K%.2f C\n", Temp1); |
POTLESS_2 | 10:aca745a66d51 | 194 | printf("\x1b[0m\r Temp HTU21D = \x1b[1m\x1b[K%.2f C\n", Temp2); |
POTLESS_2 | 9:04bfdfc029cb | 195 | printf("\n"); |
POTLESS_2 | 9:04bfdfc029cb | 196 | printf("\x1b[0m\r Humidity = \x1b[1m\x1b[K%d %\n", Humid); |
POTLESS_2 | 9:04bfdfc029cb | 197 | printf("\n"); |
POTLESS_2 | 8:a750d531b381 | 198 | printf("\x1b[0m\r Cell O2 n 1 = \x1b[1m\x1b[K%d\n", CellO2_1); |
POTLESS_2 | 8:a750d531b381 | 199 | printf("\x1b[0m\r Cell O2 n 2 = \x1b[1m\x1b[K%d\n", CellO2_2); |
POTLESS_2 | 8:a750d531b381 | 200 | printf("\n"); |
POTLESS_2 | 10:aca745a66d51 | 201 | printf("\x1b[0m\r Volet Poumon = \x1b[1m\x1b[K%3.2f%\n", volet_poumon_Position); |
POTLESS_2 | 10:aca745a66d51 | 202 | printf("\x1b[0m\r Volet Fuite = \x1b[1m\x1b[K%3.2f%\n", volet_fuite_Position); |
POTLESS_2 | 10:aca745a66d51 | 203 | printf("\n"); |
POTLESS_2 | 13:22a96dc67e85 | 204 | printf("\x1b[0m\r Temps d execution de la boucle = \x1b[1m\x1b[K%f seconde(s)\n", (RATE + RATE_TRUE / 1000)); |
POTLESS_2 | 9:04bfdfc029cb | 205 | printf("\r\n", ""); |
POTLESS_2 | 9:04bfdfc029cb | 206 | printf("\x1b[0m\r A enregistrer = \x1b[1m\x1b[K%s\n", to_store); |
POTLESS_2 | 9:04bfdfc029cb | 207 | printf("\r\n", ""); |
POTLESS_2 | 12:7f3aadd79f89 | 208 | #endif |
POTLESS_2 | 4:d84250f67dec | 209 | } |
POTLESS_2 | 4:d84250f67dec | 210 | |
POTLESS_2 | 11:b2feed92584a | 211 | //Callback de l'intérruption des envois de commandes depuis le terminal |
POTLESS_2 | 6:ebed9093d661 | 212 | void callbackParam() |
POTLESS_2 | 4:d84250f67dec | 213 | { |
POTLESS_2 | 6:ebed9093d661 | 214 | while(serialMonit.readable()) { |
POTLESS_2 | 6:ebed9093d661 | 215 | if (indexParam == sizeParam) //éviter la saturation du buffer |
POTLESS_2 | 6:ebed9093d661 | 216 | serialMonit.getc(); |
POTLESS_2 | 6:ebed9093d661 | 217 | else |
POTLESS_2 | 6:ebed9093d661 | 218 | param [indexParam++] = serialMonit.getc();//chargement du buffer dans le message |
POTLESS_2 | 6:ebed9093d661 | 219 | if ((indexParam == sizeParam) || (param[indexParam -1] == '\n')) {//le message est complet ou nouvelle ligne ou autre si on veut... |
POTLESS_2 | 6:ebed9093d661 | 220 | param[indexParam] = 0; |
POTLESS_2 | 6:ebed9093d661 | 221 | newParamFlag = true; |
POTLESS_2 | 6:ebed9093d661 | 222 | } |
POTLESS_2 | 4:d84250f67dec | 223 | } |
POTLESS_2 | 6:ebed9093d661 | 224 | } |
POTLESS_2 | 4:d84250f67dec | 225 | |
POTLESS_2 | 9:04bfdfc029cb | 226 | //Callback de l'intérruption des envois de commandes depuis Android |
POTLESS_2 | 9:04bfdfc029cb | 227 | void callbackAndroid() |
POTLESS_2 | 9:04bfdfc029cb | 228 | { |
POTLESS_2 | 9:04bfdfc029cb | 229 | while(android.readable()) { |
POTLESS_2 | 9:04bfdfc029cb | 230 | if (indexAndroid == sizeAndroid) //éviter la saturation du buffer |
POTLESS_2 | 9:04bfdfc029cb | 231 | android.getc(); |
POTLESS_2 | 9:04bfdfc029cb | 232 | else |
POTLESS_2 | 9:04bfdfc029cb | 233 | Android [indexAndroid++] = android.getc();//chargement du buffer dans le message |
POTLESS_2 | 9:04bfdfc029cb | 234 | if ((indexAndroid == sizeAndroid) || (Android[indexAndroid -1] == '\n')) {//le message est complet ou nouvelle ligne ou autre si on veut... |
POTLESS_2 | 9:04bfdfc029cb | 235 | Android[indexAndroid] = 0; |
POTLESS_2 | 9:04bfdfc029cb | 236 | newAndroidFlag = true; |
POTLESS_2 | 9:04bfdfc029cb | 237 | } |
POTLESS_2 | 9:04bfdfc029cb | 238 | } |
POTLESS_2 | 9:04bfdfc029cb | 239 | } |
POTLESS_2 | 11:b2feed92584a | 240 | |
POTLESS_2 | 9:04bfdfc029cb | 241 | void Decoding_Message(char message []) |
POTLESS_2 | 9:04bfdfc029cb | 242 | { |
POTLESS_2 | 9:04bfdfc029cb | 243 | char *commande = 0; |
POTLESS_2 | 14:b5e0e882205e | 244 | float valeur = 0; |
POTLESS_2 | 9:04bfdfc029cb | 245 | |
POTLESS_2 | 14:b5e0e882205e | 246 | sscanf(message,"%s %f",&commande , &valeur); |
POTLESS_2 | 9:04bfdfc029cb | 247 | |
POTLESS_2 | 9:04bfdfc029cb | 248 | if ((char)commande == 'T') { |
POTLESS_2 | 9:04bfdfc029cb | 249 | set_time(valeur); |
POTLESS_2 | 12:7f3aadd79f89 | 250 | } else if ((char)commande == 'I') { |
POTLESS_2 | 10:aca745a66d51 | 251 | servo_poumon = remap(valeur, 0, 90, 0, 100) / 100.f; |
POTLESS_2 | 12:7f3aadd79f89 | 252 | #ifdef DELTA_MODE |
POTLESS_2 | 11:b2feed92584a | 253 | float Sf = servo_poumon + remap(delta, 0, 90, 0, 100) / 100.f; |
POTLESS_2 | 13:22a96dc67e85 | 254 | if(Sf >= 0 && Sf <= 90)//Pas bon, à retravailler.... |
POTLESS_2 | 12:7f3aadd79f89 | 255 | servo_fuite = Sf; |
POTLESS_2 | 12:7f3aadd79f89 | 256 | #endif |
POTLESS_2 | 10:aca745a66d51 | 257 | printf(" Servo Poumon = %f\r\n", remap(valeur, 0, 90, 0, 100) / 100.f); |
POTLESS_2 | 12:7f3aadd79f89 | 258 | } else if ((char)commande == 'O') { |
POTLESS_2 | 10:aca745a66d51 | 259 | servo_fuite = 1 - remap(valeur, 0, 90, 0, 100) / 100.f; |
POTLESS_2 | 12:7f3aadd79f89 | 260 | printf(" Servo Fuite = %f\r\n", 1 - remap(valeur, 0, 90, 0, 100) / 100.f); |
POTLESS_2 | 11:b2feed92584a | 261 | } else if ((char)commande == 'D') { |
POTLESS_2 | 11:b2feed92584a | 262 | delta = valeur; |
POTLESS_2 | 12:7f3aadd79f89 | 263 | #ifdef DELTA_MODE |
POTLESS_2 | 11:b2feed92584a | 264 | float Sf = servo_poumon + remap(delta, 0, 90, 0, 100) / 100.f; |
POTLESS_2 | 13:22a96dc67e85 | 265 | if(Sf >= 0 && Sf <= 90)//Pas bon, à retravailler.... |
POTLESS_2 | 12:7f3aadd79f89 | 266 | servo_fuite = Sf; |
POTLESS_2 | 12:7f3aadd79f89 | 267 | #endif |
POTLESS_2 | 10:aca745a66d51 | 268 | } else if ((char)commande == 'R') { |
POTLESS_2 | 10:aca745a66d51 | 269 | NVIC_SystemReset(); |
POTLESS_2 | 12:7f3aadd79f89 | 270 | ///////////////////////////////////////// |
POTLESS_2 | 12:7f3aadd79f89 | 271 | //Pour rajouter une commande |
POTLESS_2 | 12:7f3aadd79f89 | 272 | //} else if ((char)commande == 'X') { |
POTLESS_2 | 12:7f3aadd79f89 | 273 | // attribuer à une VARIABLE = valeur; |
POTLESS_2 | 12:7f3aadd79f89 | 274 | // ou une action, avec ou sans valeur |
POTLESS_2 | 12:7f3aadd79f89 | 275 | ///////////////////////////////////////// |
POTLESS_2 | 12:7f3aadd79f89 | 276 | } else { |
POTLESS_2 | 9:04bfdfc029cb | 277 | sensors.cozirSend(message); |
POTLESS_2 | 9:04bfdfc029cb | 278 | } |
POTLESS_2 | 9:04bfdfc029cb | 279 | |
POTLESS_2 | 11:b2feed92584a | 280 | //wait_ms(100); |
POTLESS_2 | 9:04bfdfc029cb | 281 | strcpy(param," "); |
POTLESS_2 | 9:04bfdfc029cb | 282 | indexParam = 0; |
POTLESS_2 | 9:04bfdfc029cb | 283 | newParamFlag = false; |
POTLESS_2 | 9:04bfdfc029cb | 284 | } |
POTLESS_2 | 9:04bfdfc029cb | 285 | |
POTLESS_2 | 9:04bfdfc029cb | 286 | void Decoding_Message_Android(char message []) |
POTLESS_2 | 9:04bfdfc029cb | 287 | { |
POTLESS_2 | 9:04bfdfc029cb | 288 | char *commande = 0; |
POTLESS_2 | 14:b5e0e882205e | 289 | float valeur = 0; |
POTLESS_2 | 9:04bfdfc029cb | 290 | |
POTLESS_2 | 14:b5e0e882205e | 291 | sscanf(message,"%s %f",&commande , &valeur); |
POTLESS_2 | 9:04bfdfc029cb | 292 | |
POTLESS_2 | 9:04bfdfc029cb | 293 | if ((char)commande == 'T') { |
POTLESS_2 | 9:04bfdfc029cb | 294 | set_time(valeur); |
POTLESS_2 | 12:7f3aadd79f89 | 295 | } else if ((char)commande == 'I') { |
POTLESS_2 | 10:aca745a66d51 | 296 | servo_poumon = remap(valeur, 0, 90, 0, 100) / 100.f; |
POTLESS_2 | 12:7f3aadd79f89 | 297 | #ifdef DELTA_MODE |
POTLESS_2 | 11:b2feed92584a | 298 | float Sf = servo_poumon + remap(delta, 0, 90, 0, 100) / 100.f; |
POTLESS_2 | 13:22a96dc67e85 | 299 | if(Sf >= 0 && Sf <= 90)//Pas bon, à retravailler.... |
POTLESS_2 | 12:7f3aadd79f89 | 300 | servo_fuite = Sf; |
POTLESS_2 | 12:7f3aadd79f89 | 301 | #endif |
POTLESS_2 | 10:aca745a66d51 | 302 | printf(" Servo Poumon = %f\r\n", remap(valeur, 0, 90, 0, 100) / 100.f); |
POTLESS_2 | 12:7f3aadd79f89 | 303 | } else if ((char)commande == 'O') { |
POTLESS_2 | 10:aca745a66d51 | 304 | servo_fuite = 1 - remap(valeur, 0, 90, 0, 100) / 100.f; |
POTLESS_2 | 11:b2feed92584a | 305 | printf(" Servo Fuite = %f\r\n", 1 - remap(valeur, 0, 90, 0, 100) / 100.f); |
POTLESS_2 | 11:b2feed92584a | 306 | } else if ((char)commande == 'D') { |
POTLESS_2 | 11:b2feed92584a | 307 | delta = valeur; |
POTLESS_2 | 12:7f3aadd79f89 | 308 | #ifdef DELTA_MODE |
POTLESS_2 | 11:b2feed92584a | 309 | float Sf = servo_poumon + remap(delta, 0, 90, 0, 100) / 100.f; |
POTLESS_2 | 13:22a96dc67e85 | 310 | if(Sf >= 0 && Sf <= 90)//Pas bon, à retravailler.... |
POTLESS_2 | 12:7f3aadd79f89 | 311 | servo_fuite = Sf; |
POTLESS_2 | 12:7f3aadd79f89 | 312 | #endif |
POTLESS_2 | 12:7f3aadd79f89 | 313 | ///////////////////////////////////////// |
POTLESS_2 | 12:7f3aadd79f89 | 314 | //Pour rajouter une commande |
POTLESS_2 | 12:7f3aadd79f89 | 315 | //} else if ((char)commande == 'X') { |
POTLESS_2 | 12:7f3aadd79f89 | 316 | // attribuer à une VARIABLE = valeur; |
POTLESS_2 | 12:7f3aadd79f89 | 317 | // ou une action, avec ou sans valeur |
POTLESS_2 | 12:7f3aadd79f89 | 318 | ///////////////////////////////////////// |
POTLESS_2 | 9:04bfdfc029cb | 319 | } else if ((char)commande == 'R') { |
POTLESS_2 | 9:04bfdfc029cb | 320 | NVIC_SystemReset(); |
POTLESS_2 | 9:04bfdfc029cb | 321 | } |
POTLESS_2 | 12:7f3aadd79f89 | 322 | #ifdef PID_MODE |
POTLESS_2 | 12:7f3aadd79f89 | 323 | else if ((char)commande == 'p') { |
POTLESS_2 | 12:7f3aadd79f89 | 324 | Kc = (float)valeur; |
POTLESS_2 | 12:7f3aadd79f89 | 325 | control_Servo.setTunings(Kc, Ti, Td); |
POTLESS_2 | 14:b5e0e882205e | 326 | printf(" UPDATE PID --> Kc = %f Ti = %f Td = %f\r\n\n", Kc, Ti, Td); |
POTLESS_2 | 15:efd3b3bf3f37 | 327 | } else if ((char)commande == 'i') { |
POTLESS_2 | 12:7f3aadd79f89 | 328 | Ti = (float)valeur; |
POTLESS_2 | 12:7f3aadd79f89 | 329 | control_Servo.setTunings(Kc, Ti, Td); |
POTLESS_2 | 14:b5e0e882205e | 330 | printf(" UPDATE PID --> Kc = %f Ti = %f Td = %f\r\n\n", Kc, Ti, Td); |
POTLESS_2 | 15:efd3b3bf3f37 | 331 | } else if ((char)commande == 'd') { |
POTLESS_2 | 12:7f3aadd79f89 | 332 | Td = (float)valeur; |
POTLESS_2 | 12:7f3aadd79f89 | 333 | control_Servo.setTunings(Kc, Ti, Td); |
POTLESS_2 | 14:b5e0e882205e | 334 | printf(" UPDATE PID --> Kc = %f Ti = %f Td = %f\r\n\n", Kc, Ti, Td); |
POTLESS_2 | 15:efd3b3bf3f37 | 335 | } else if ((char)commande == 'c') { |
POTLESS_2 | 12:7f3aadd79f89 | 336 | consigne = valeur; |
POTLESS_2 | 15:efd3b3bf3f37 | 337 | control_Servo.setSetPoint(consigne); |
POTLESS_2 | 14:b5e0e882205e | 338 | printf(" UPDATE CONSIGNE PID --> Consigne = %d\r\n\n", consigne); |
POTLESS_2 | 12:7f3aadd79f89 | 339 | } |
POTLESS_2 | 15:efd3b3bf3f37 | 340 | #endif |
POTLESS_2 | 11:b2feed92584a | 341 | //wait_ms(100); |
POTLESS_2 | 9:04bfdfc029cb | 342 | strcpy(Android," "); |
POTLESS_2 | 9:04bfdfc029cb | 343 | indexAndroid = 0; |
POTLESS_2 | 9:04bfdfc029cb | 344 | newAndroidFlag = false; |
POTLESS_2 | 9:04bfdfc029cb | 345 | } |
POTLESS_2 | 9:04bfdfc029cb | 346 | |
POTLESS_2 | 10:aca745a66d51 | 347 | //Calibration des limites de feedback des servos |
POTLESS_2 | 10:aca745a66d51 | 348 | void Calibration_servo() |
POTLESS_2 | 10:aca745a66d51 | 349 | { |
POTLESS_2 | 10:aca745a66d51 | 350 | //Servos, calibration du feedback |
POTLESS_2 | 10:aca745a66d51 | 351 | printf(" Check Servos :\r\n"); |
POTLESS_2 | 10:aca745a66d51 | 352 | printf("\r\n"); |
POTLESS_2 | 10:aca745a66d51 | 353 | servo_poumon.period(0.001); // à mettre dans le setup si cette calib n'est pas appelée (je l ai trouvée commentée) |
POTLESS_2 | 10:aca745a66d51 | 354 | servo_fuite.period(0.001); |
POTLESS_2 | 10:aca745a66d51 | 355 | //Rentrer les servos à fond |
POTLESS_2 | 10:aca745a66d51 | 356 | servo_poumon = 0; |
POTLESS_2 | 10:aca745a66d51 | 357 | servo_fuite = 0; |
POTLESS_2 | 10:aca745a66d51 | 358 | wait(4); |
POTLESS_2 | 10:aca745a66d51 | 359 | |
POTLESS_2 | 10:aca745a66d51 | 360 | Limit_min_Servo_Poumon = FeedBack_Servo_Poumon.read(); |
POTLESS_2 | 10:aca745a66d51 | 361 | wait_ms(100); |
POTLESS_2 | 10:aca745a66d51 | 362 | Limit_min_Servo_Fuite = FeedBack_Servo_Fuite.read(); |
POTLESS_2 | 10:aca745a66d51 | 363 | |
POTLESS_2 | 10:aca745a66d51 | 364 | printf(" FeedBack Servo POUMON min = %f\n", Limit_min_Servo_Poumon); |
POTLESS_2 | 10:aca745a66d51 | 365 | printf(" FeedBack Servo FUITE min = %f\n", Limit_min_Servo_Fuite); |
POTLESS_2 | 10:aca745a66d51 | 366 | printf("\r\n"); |
POTLESS_2 | 10:aca745a66d51 | 367 | |
POTLESS_2 | 10:aca745a66d51 | 368 | //Sortir les servos à fond |
POTLESS_2 | 10:aca745a66d51 | 369 | servo_poumon = 1; |
POTLESS_2 | 10:aca745a66d51 | 370 | servo_fuite = 1; |
POTLESS_2 | 10:aca745a66d51 | 371 | wait(4); |
POTLESS_2 | 10:aca745a66d51 | 372 | |
POTLESS_2 | 10:aca745a66d51 | 373 | Limit_max_Servo_Poumon = FeedBack_Servo_Poumon.read(); |
POTLESS_2 | 10:aca745a66d51 | 374 | wait_ms(100); |
POTLESS_2 | 10:aca745a66d51 | 375 | Limit_max_Servo_Fuite = FeedBack_Servo_Fuite.read(); |
POTLESS_2 | 10:aca745a66d51 | 376 | |
POTLESS_2 | 10:aca745a66d51 | 377 | printf(" FeedBack Servo POUMON Max = %f\n", Limit_max_Servo_Poumon); |
POTLESS_2 | 10:aca745a66d51 | 378 | printf(" FeedBack Servo FUITE Max = %f\n", Limit_max_Servo_Fuite); |
POTLESS_2 | 10:aca745a66d51 | 379 | printf("\r\n"); |
POTLESS_2 | 10:aca745a66d51 | 380 | |
POTLESS_2 | 10:aca745a66d51 | 381 | //Position milieu |
POTLESS_2 | 10:aca745a66d51 | 382 | servo_poumon = 0.5; |
POTLESS_2 | 10:aca745a66d51 | 383 | servo_fuite = 0.5; |
POTLESS_2 | 10:aca745a66d51 | 384 | wait(4); |
POTLESS_2 | 10:aca745a66d51 | 385 | |
POTLESS_2 | 10:aca745a66d51 | 386 | //Mesure du delta consigne / feedback |
POTLESS_2 | 10:aca745a66d51 | 387 | Delta_FB_1 = abs(remap(FeedBack_Servo_Poumon.read(), Limit_max_Servo_Poumon, Limit_min_Servo_Poumon, 0, 90) - 45); |
POTLESS_2 | 10:aca745a66d51 | 388 | Delta_FB_2 = abs(remap(FeedBack_Servo_Fuite.read(), Limit_max_Servo_Fuite, Limit_min_Servo_Fuite, 0, 90) - 45); |
POTLESS_2 | 10:aca745a66d51 | 389 | |
POTLESS_2 | 10:aca745a66d51 | 390 | printf(" Delta Servo 1 = %f\n", Delta_FB_1); |
POTLESS_2 | 10:aca745a66d51 | 391 | printf(" Delta Servo 2 = %f\n", Delta_FB_2); |
POTLESS_2 | 10:aca745a66d51 | 392 | |
POTLESS_2 | 10:aca745a66d51 | 393 | if(Delta_FB_1 > 10 || Delta_FB_2 > 10) printf(" Delta Servos non satisfaisant...\r\n\r\n"); |
POTLESS_2 | 12:7f3aadd79f89 | 394 | |
POTLESS_2 | 11:b2feed92584a | 395 | #ifdef DELTA_MODE |
POTLESS_2 | 11:b2feed92584a | 396 | //Position initial delta |
POTLESS_2 | 11:b2feed92584a | 397 | servo_poumon = 0.5; |
POTLESS_2 | 11:b2feed92584a | 398 | servo_fuite = 0.5 + remap(delta, 0, 90, 0, 100) / 100.f; |
POTLESS_2 | 12:7f3aadd79f89 | 399 | #endif |
POTLESS_2 | 10:aca745a66d51 | 400 | } |
POTLESS_2 | 10:aca745a66d51 | 401 | |
POTLESS_2 | 4:d84250f67dec | 402 | int main() |
POTLESS_2 | 12:7f3aadd79f89 | 403 | { |
POTLESS_2 | 11:b2feed92584a | 404 | //UNIX TIMESTAMP depuis le erminal MAC = date +%s + 7200 pour heure d'été..... |
POTLESS_2 | 12:7f3aadd79f89 | 405 | |
POTLESS_2 | 10:aca745a66d51 | 406 | Calibration_servo(); |
POTLESS_2 | 12:7f3aadd79f89 | 407 | |
POTLESS_2 | 11:b2feed92584a | 408 | sensors.Sensors_INIT(false, true, 5, SPOOLING, DIGI_FILTER32, CALIB_AIR); |
POTLESS_2 | 6:ebed9093d661 | 409 | |
POTLESS_2 | 6:ebed9093d661 | 410 | serialMonit.attach(&callbackParam, Serial::RxIrq); |
POTLESS_2 | 6:ebed9093d661 | 411 | |
POTLESS_2 | 9:04bfdfc029cb | 412 | android.attach(&callbackAndroid, Serial::RxIrq); |
POTLESS_2 | 9:04bfdfc029cb | 413 | |
POTLESS_2 | 7:ad15c386e960 | 414 | serialMonit.printf(" Demarrage...\r\n\r\n Entrez les comandes COZIR si besoin :\r\n"); |
POTLESS_2 | 6:ebed9093d661 | 415 | |
POTLESS_2 | 15:efd3b3bf3f37 | 416 | /* |
POTLESS_2 | 15:efd3b3bf3f37 | 417 | |
POTLESS_2 | 15:efd3b3bf3f37 | 418 | Pour mémoire, les réglage de priorité des thread |
POTLESS_2 | 15:efd3b3bf3f37 | 419 | |
POTLESS_2 | 15:efd3b3bf3f37 | 420 | osPriorityIdle = -3, ///< priority: idle (lowest) |
POTLESS_2 | 15:efd3b3bf3f37 | 421 | osPriorityLow = -2, ///< priority: low |
POTLESS_2 | 15:efd3b3bf3f37 | 422 | osPriorityBelowNormal = -1, ///< priority: below normal |
POTLESS_2 | 15:efd3b3bf3f37 | 423 | osPriorityNormal = 0, ///< priority: normal (default) |
POTLESS_2 | 15:efd3b3bf3f37 | 424 | osPriorityAboveNormal = +1, ///< priority: above normal |
POTLESS_2 | 15:efd3b3bf3f37 | 425 | osPriorityHigh = +2, ///< priority: high |
POTLESS_2 | 15:efd3b3bf3f37 | 426 | osPriorityRealtime = +3, ///< priority: realtime (highest) |
POTLESS_2 | 15:efd3b3bf3f37 | 427 | osPriorityError = 0x84 ///< system cannot determine priority or thread has illegal priority |
POTLESS_2 | 15:efd3b3bf3f37 | 428 | */ |
POTLESS_2 | 15:efd3b3bf3f37 | 429 | |
POTLESS_2 | 10:aca745a66d51 | 430 | thread.start(Get_Info_thread); |
POTLESS_2 | 9:04bfdfc029cb | 431 | |
POTLESS_2 | 7:ad15c386e960 | 432 | thread.set_priority(osPriorityRealtime); |
POTLESS_2 | 12:7f3aadd79f89 | 433 | |
POTLESS_2 | 12:7f3aadd79f89 | 434 | #ifdef PID_MODE |
POTLESS_2 | 12:7f3aadd79f89 | 435 | //Init PID |
POTLESS_2 | 12:7f3aadd79f89 | 436 | //Entrée PPO2 entre 100 et 1000 mb |
POTLESS_2 | 12:7f3aadd79f89 | 437 | control_Servo.setInputLimits(Min_Input, Max_Input); |
POTLESS_2 | 12:7f3aadd79f89 | 438 | //Sortie servo entre 0 et 100 % |
POTLESS_2 | 12:7f3aadd79f89 | 439 | control_Servo.setOutputLimits(Min_Output, Max_Output); |
POTLESS_2 | 15:efd3b3bf3f37 | 440 | //Mode auto au démarrage |
POTLESS_2 | 12:7f3aadd79f89 | 441 | control_Servo.setMode(AUTO_MODE); |
POTLESS_2 | 12:7f3aadd79f89 | 442 | //Consigne à x mb |
POTLESS_2 | 12:7f3aadd79f89 | 443 | control_Servo.setSetPoint(consigne); |
POTLESS_2 | 12:7f3aadd79f89 | 444 | |
POTLESS_2 | 15:efd3b3bf3f37 | 445 | #endif |
POTLESS_2 | 15:efd3b3bf3f37 | 446 | |
POTLESS_2 | 11:b2feed92584a | 447 | #ifdef VT100 |
POTLESS_2 | 8:a750d531b381 | 448 | printf(CLS); |
POTLESS_2 | 11:b2feed92584a | 449 | #endif |
POTLESS_2 | 9:04bfdfc029cb | 450 | |
POTLESS_2 | 7:ad15c386e960 | 451 | while (true) { |
POTLESS_2 | 6:ebed9093d661 | 452 | |
POTLESS_2 | 7:ad15c386e960 | 453 | //Démarrage du Timer mesurant le temps d'éxecution du code |
POTLESS_2 | 7:ad15c386e960 | 454 | REAL_RATE.start(); |
POTLESS_2 | 7:ad15c386e960 | 455 | |
POTLESS_2 | 6:ebed9093d661 | 456 | if (newParamFlag) { |
POTLESS_2 | 6:ebed9093d661 | 457 | serialMonit.printf("Param = %s\r\n", param); |
POTLESS_2 | 9:04bfdfc029cb | 458 | Decoding_Message(param); |
POTLESS_2 | 9:04bfdfc029cb | 459 | } |
POTLESS_2 | 9:04bfdfc029cb | 460 | |
POTLESS_2 | 9:04bfdfc029cb | 461 | if (newAndroidFlag) { |
POTLESS_2 | 9:04bfdfc029cb | 462 | serialMonit.printf("Android = %s\r\n", Android); |
POTLESS_2 | 9:04bfdfc029cb | 463 | Decoding_Message_Android(Android); |
POTLESS_2 | 6:ebed9093d661 | 464 | } |
POTLESS_2 | 7:ad15c386e960 | 465 | |
POTLESS_2 | 15:efd3b3bf3f37 | 466 | //Fabrication de la chaine Date / heure |
POTLESS_2 | 15:efd3b3bf3f37 | 467 | seconds = time(NULL); |
POTLESS_2 | 15:efd3b3bf3f37 | 468 | char Time_buf[32]; |
POTLESS_2 | 15:efd3b3bf3f37 | 469 | strftime(Time_buf, 32, "%D %I-%M-%S ", localtime(&seconds)); |
POTLESS_2 | 15:efd3b3bf3f37 | 470 | |
POTLESS_2 | 15:efd3b3bf3f37 | 471 | //Fabrication de la chaine à enregistrer |
POTLESS_2 | 15:efd3b3bf3f37 | 472 | sprintf(to_store,"%s:%d:%d:%.2f:%.2f:%.2f:%d:%d:%d:%3.2f:%3.2f:%d:%f:%f:%f", |
POTLESS_2 | 15:efd3b3bf3f37 | 473 | Time_buf, |
POTLESS_2 | 15:efd3b3bf3f37 | 474 | co2, |
POTLESS_2 | 15:efd3b3bf3f37 | 475 | ppO2, |
POTLESS_2 | 15:efd3b3bf3f37 | 476 | pression, |
POTLESS_2 | 15:efd3b3bf3f37 | 477 | Temp1, |
POTLESS_2 | 15:efd3b3bf3f37 | 478 | Temp2, |
POTLESS_2 | 15:efd3b3bf3f37 | 479 | Humid, |
POTLESS_2 | 15:efd3b3bf3f37 | 480 | CellO2_1, |
POTLESS_2 | 15:efd3b3bf3f37 | 481 | CellO2_2, |
POTLESS_2 | 15:efd3b3bf3f37 | 482 | volet_poumon_Position, |
POTLESS_2 | 15:efd3b3bf3f37 | 483 | volet_fuite_Position, |
POTLESS_2 | 15:efd3b3bf3f37 | 484 | MODE_FLAG, |
POTLESS_2 | 15:efd3b3bf3f37 | 485 | Kc, |
POTLESS_2 | 15:efd3b3bf3f37 | 486 | Ti, |
POTLESS_2 | 15:efd3b3bf3f37 | 487 | Td); |
POTLESS_2 | 15:efd3b3bf3f37 | 488 | |
POTLESS_2 | 15:efd3b3bf3f37 | 489 | //Enregistrement de la chaine |
POTLESS_2 | 15:efd3b3bf3f37 | 490 | sensors.Write_SD((string)to_store); |
POTLESS_2 | 15:efd3b3bf3f37 | 491 | |
POTLESS_2 | 15:efd3b3bf3f37 | 492 | //Pour Android on ajoute < et > pour décoder l'arrivée du message |
POTLESS_2 | 9:04bfdfc029cb | 493 | if (NEED_ANDROID_OUTPUT == 1) { |
POTLESS_2 | 15:efd3b3bf3f37 | 494 | sprintf(to_android,"<%s>",to_store); |
POTLESS_2 | 12:7f3aadd79f89 | 495 | ANDROID(to_android); |
POTLESS_2 | 9:04bfdfc029cb | 496 | } |
POTLESS_2 | 15:efd3b3bf3f37 | 497 | |
POTLESS_2 | 13:22a96dc67e85 | 498 | //Vers le moniteur dérie |
POTLESS_2 | 13:22a96dc67e85 | 499 | Affichage_moniteur(); |
POTLESS_2 | 15:efd3b3bf3f37 | 500 | |
POTLESS_2 | 15:efd3b3bf3f37 | 501 | |
POTLESS_2 | 15:efd3b3bf3f37 | 502 | #ifdef PID_MODE |
POTLESS_2 | 15:efd3b3bf3f37 | 503 | //Update du PID |
POTLESS_2 | 15:efd3b3bf3f37 | 504 | control_Servo.setProcessValue(ppO2); |
POTLESS_2 | 15:efd3b3bf3f37 | 505 | //Nouvelle sortie servo |
POTLESS_2 | 15:efd3b3bf3f37 | 506 | Commande_PID = control_Servo.compute(); |
POTLESS_2 | 15:efd3b3bf3f37 | 507 | //Appliquer la consigne |
POTLESS_2 | 15:efd3b3bf3f37 | 508 | servo_fuite = Commande_PID; |
POTLESS_2 | 12:7f3aadd79f89 | 509 | #endif |
POTLESS_2 | 15:efd3b3bf3f37 | 510 | |
POTLESS_2 | 7:ad15c386e960 | 511 | //Arrêt du Timer mesurant le temps d'éxecution du code |
POTLESS_2 | 7:ad15c386e960 | 512 | REAL_RATE.stop(); |
POTLESS_2 | 7:ad15c386e960 | 513 | //Définition de la nouvelle valeur du temps d'échantillonage du PID. |
POTLESS_2 | 7:ad15c386e960 | 514 | RATE = REAL_RATE.read(); |
POTLESS_2 | 7:ad15c386e960 | 515 | //Reset du Timer |
POTLESS_2 | 7:ad15c386e960 | 516 | REAL_RATE.reset(); |
POTLESS_2 | 12:7f3aadd79f89 | 517 | |
POTLESS_2 | 11:b2feed92584a | 518 | //Pour ralentir le code à 1 seconde fixe quelque soit les intéruptions du loop.... |
POTLESS_2 | 12:7f3aadd79f89 | 519 | RATE_TRUE = (Ref_Time - RATE) * 1000; |
POTLESS_2 | 15:efd3b3bf3f37 | 520 | |
POTLESS_2 | 11:b2feed92584a | 521 | wait_ms(RATE_TRUE); |
POTLESS_2 | 4:d84250f67dec | 522 | } |
POTLESS_2 | 4:d84250f67dec | 523 | } |