![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
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@10:aca745a66d51, 2017-11-02 (annotated)
- Committer:
- POTLESS_2
- Date:
- Thu Nov 02 10:39:53 2017 +0000
- Revision:
- 10:aca745a66d51
- Parent:
- 9:04bfdfc029cb
- Child:
- 11:b2feed92584a
Version Identique ? sensor test mais avec contr?le des volet par moniteur s?rie et android.
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 | 4:d84250f67dec | 5 | |
POTLESS_2 | 10:aca745a66d51 | 6 | //Commandes des servos |
POTLESS_2 | 10:aca745a66d51 | 7 | #define PWM_SERVO_POUMON PB_15 |
POTLESS_2 | 10:aca745a66d51 | 8 | #define PWM_SERVO_FUITE PB_1 |
POTLESS_2 | 10:aca745a66d51 | 9 | //Retour des servos |
POTLESS_2 | 10:aca745a66d51 | 10 | #define FEED_BACK_SERVO_POUMON PC_2 |
POTLESS_2 | 10:aca745a66d51 | 11 | #define FEED_BACK_SERVO_FUITE PC_3 |
POTLESS_2 | 9:04bfdfc029cb | 12 | |
POTLESS_2 | 9:04bfdfc029cb | 13 | //Ecrit dans le moniteur série de la tablette à 9600 bds si sur 1, penser à mettre NEED_CONSOLE_OUTPUT à 0 |
POTLESS_2 | 9:04bfdfc029cb | 14 | #define NEED_ANDROID_OUTPUT 1 |
POTLESS_2 | 9:04bfdfc029cb | 15 | |
POTLESS_2 | 10:aca745a66d51 | 16 | //Sortie en mode VT100, à commenter si on veut une sortie type Arduino |
POTLESS_2 | 10:aca745a66d51 | 17 | //#define VT100 |
POTLESS_2 | 9:04bfdfc029cb | 18 | |
POTLESS_2 | 9:04bfdfc029cb | 19 | #if NEED_ANDROID_OUTPUT |
POTLESS_2 | 9:04bfdfc029cb | 20 | #define ANDROID(...) { android.printf(__VA_ARGS__); } |
POTLESS_2 | 9:04bfdfc029cb | 21 | #else |
POTLESS_2 | 9:04bfdfc029cb | 22 | #define ANDROID(...) |
POTLESS_2 | 9:04bfdfc029cb | 23 | #endif |
POTLESS_2 | 9:04bfdfc029cb | 24 | |
POTLESS_2 | 7:ad15c386e960 | 25 | //Moniteur série |
POTLESS_2 | 9:04bfdfc029cb | 26 | Serial serialMonit(USBTX,USBRX,9600); |
POTLESS_2 | 10:aca745a66d51 | 27 | |
POTLESS_2 | 9:04bfdfc029cb | 28 | //COM Série vers Android, Serial 3 |
POTLESS_2 | 9:04bfdfc029cb | 29 | Serial android(PC_10,PC_11,9600); |
POTLESS_2 | 4:d84250f67dec | 30 | |
POTLESS_2 | 7:ad15c386e960 | 31 | //Init de la lib ARNSRS; |
POTLESS_2 | 7:ad15c386e960 | 32 | SENSOR_HEAD_REV_B sensors; |
potless | 2:4a8bf1d53439 | 33 | |
POTLESS_2 | 6:ebed9093d661 | 34 | //pour Param Cozir |
POTLESS_2 | 9:04bfdfc029cb | 35 | const int sizeParam = 20; |
POTLESS_2 | 6:ebed9093d661 | 36 | char param[sizeParam ]; |
POTLESS_2 | 6:ebed9093d661 | 37 | int indexParam; |
POTLESS_2 | 6:ebed9093d661 | 38 | bool newParamFlag = false; |
potless | 2:4a8bf1d53439 | 39 | |
POTLESS_2 | 9:04bfdfc029cb | 40 | //pour Commandes Android |
POTLESS_2 | 9:04bfdfc029cb | 41 | const int sizeAndroid = 20; |
POTLESS_2 | 9:04bfdfc029cb | 42 | char Android[sizeParam ]; |
POTLESS_2 | 9:04bfdfc029cb | 43 | int indexAndroid; |
POTLESS_2 | 9:04bfdfc029cb | 44 | bool newAndroidFlag = false; |
POTLESS_2 | 9:04bfdfc029cb | 45 | |
POTLESS_2 | 7:ad15c386e960 | 46 | //Variables de stockage des infos capteurs |
POTLESS_2 | 7:ad15c386e960 | 47 | int co2 = 0; |
POTLESS_2 | 7:ad15c386e960 | 48 | float pression = 0; |
POTLESS_2 | 9:04bfdfc029cb | 49 | float Temp1 = 0; |
POTLESS_2 | 7:ad15c386e960 | 50 | int ppO2 = 0; |
POTLESS_2 | 7:ad15c386e960 | 51 | int CellO2_1 = 0; |
POTLESS_2 | 7:ad15c386e960 | 52 | int CellO2_2 = 0; |
POTLESS_2 | 7:ad15c386e960 | 53 | |
POTLESS_2 | 7:ad15c386e960 | 54 | //Mesure du tempsd'éxecution du loop |
POTLESS_2 | 7:ad15c386e960 | 55 | Timer REAL_RATE; |
POTLESS_2 | 7:ad15c386e960 | 56 | float RATE = 0; |
POTLESS_2 | 7:ad15c386e960 | 57 | |
POTLESS_2 | 8:a750d531b381 | 58 | //HTU21D |
POTLESS_2 | 8:a750d531b381 | 59 | HTU21D temphumid(PB_9, PB_8); //Temp humid sensor || SDA, SCL |
POTLESS_2 | 9:04bfdfc029cb | 60 | float Temp2; |
POTLESS_2 | 9:04bfdfc029cb | 61 | int Humid; |
POTLESS_2 | 9:04bfdfc029cb | 62 | |
POTLESS_2 | 9:04bfdfc029cb | 63 | //Data LOG |
POTLESS_2 | 9:04bfdfc029cb | 64 | char to_store[50]; |
POTLESS_2 | 9:04bfdfc029cb | 65 | time_t seconds; |
POTLESS_2 | 8:a750d531b381 | 66 | |
POTLESS_2 | 8:a750d531b381 | 67 | //VT100 |
POTLESS_2 | 8:a750d531b381 | 68 | static const char CLS[] = "\x1B[2J"; |
POTLESS_2 | 8:a750d531b381 | 69 | static const char HOME[] = "\x1B[H"; |
POTLESS_2 | 8:a750d531b381 | 70 | |
POTLESS_2 | 7:ad15c386e960 | 71 | //Thread d'intérogation des capteurs |
POTLESS_2 | 7:ad15c386e960 | 72 | Thread thread; |
POTLESS_2 | 7:ad15c386e960 | 73 | |
POTLESS_2 | 10:aca745a66d51 | 74 | //Contrôle des servos |
POTLESS_2 | 10:aca745a66d51 | 75 | PwmOut servo_poumon(PWM_SERVO_POUMON); |
POTLESS_2 | 10:aca745a66d51 | 76 | AnalogIn FeedBack_Servo_Poumon(FEED_BACK_SERVO_POUMON); |
POTLESS_2 | 10:aca745a66d51 | 77 | float volet_poumon_Position; |
POTLESS_2 | 10:aca745a66d51 | 78 | float Limit_min_Servo_Poumon, Limit_max_Servo_Poumon; |
POTLESS_2 | 10:aca745a66d51 | 79 | float Delta_FB_1; |
POTLESS_2 | 10:aca745a66d51 | 80 | |
POTLESS_2 | 10:aca745a66d51 | 81 | PwmOut servo_fuite(PWM_SERVO_FUITE); |
POTLESS_2 | 10:aca745a66d51 | 82 | AnalogIn FeedBack_Servo_Fuite(FEED_BACK_SERVO_FUITE); |
POTLESS_2 | 10:aca745a66d51 | 83 | float volet_fuite_Position; |
POTLESS_2 | 10:aca745a66d51 | 84 | float Limit_min_Servo_Fuite, Limit_max_Servo_Fuite; |
POTLESS_2 | 10:aca745a66d51 | 85 | float Delta_FB_2; |
POTLESS_2 | 10:aca745a66d51 | 86 | |
POTLESS_2 | 10:aca745a66d51 | 87 | bool FLAG_COMMAND_SERVO = false; |
POTLESS_2 | 10:aca745a66d51 | 88 | |
POTLESS_2 | 10:aca745a66d51 | 89 | //Buffer pour Commandes servo |
POTLESS_2 | 10:aca745a66d51 | 90 | char commande_servo[50]; |
POTLESS_2 | 10:aca745a66d51 | 91 | int indexCommande; |
POTLESS_2 | 10:aca745a66d51 | 92 | |
POTLESS_2 | 10:aca745a66d51 | 93 | //Remap d'une valeur |
POTLESS_2 | 10:aca745a66d51 | 94 | float remap(float x, float in_min, float in_max, float out_min, float out_max) |
POTLESS_2 | 10:aca745a66d51 | 95 | { |
POTLESS_2 | 10:aca745a66d51 | 96 | return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; |
POTLESS_2 | 10:aca745a66d51 | 97 | } |
POTLESS_2 | 10:aca745a66d51 | 98 | |
POTLESS_2 | 10:aca745a66d51 | 99 | |
POTLESS_2 | 10:aca745a66d51 | 100 | //Thread d'intérogation des capteurs, positions servo et constitution de la chaine |
POTLESS_2 | 10:aca745a66d51 | 101 | void Get_Info_thread() |
POTLESS_2 | 6:ebed9093d661 | 102 | { |
POTLESS_2 | 7:ad15c386e960 | 103 | while (true) { |
POTLESS_2 | 7:ad15c386e960 | 104 | |
POTLESS_2 | 7:ad15c386e960 | 105 | //CO2 sur Cozir |
POTLESS_2 | 7:ad15c386e960 | 106 | co2 = sensors.requestCO2(); |
POTLESS_2 | 7:ad15c386e960 | 107 | //P / T sur MS5837 |
POTLESS_2 | 7:ad15c386e960 | 108 | pression = sensors.requestPress(); |
POTLESS_2 | 9:04bfdfc029cb | 109 | Temp1 = sensors.requestTemp(); |
POTLESS_2 | 7:ad15c386e960 | 110 | //PPO2 sur ADS1015 |
POTLESS_2 | 7:ad15c386e960 | 111 | ppO2 = sensors.requestPpO2(); |
POTLESS_2 | 7:ad15c386e960 | 112 | //Cell O2 en mV |
POTLESS_2 | 7:ad15c386e960 | 113 | CellO2_1 = sensors.requestCellO2_1(); |
POTLESS_2 | 7:ad15c386e960 | 114 | CellO2_2 = sensors.requestCellO2_2(); |
POTLESS_2 | 9:04bfdfc029cb | 115 | |
POTLESS_2 | 8:a750d531b381 | 116 | //HTU21D |
POTLESS_2 | 9:04bfdfc029cb | 117 | Temp2 = temphumid.sample_ctemp(); |
POTLESS_2 | 9:04bfdfc029cb | 118 | Humid = temphumid.sample_humid(); |
POTLESS_2 | 9:04bfdfc029cb | 119 | |
POTLESS_2 | 10:aca745a66d51 | 120 | //Retour position des servos |
POTLESS_2 | 10:aca745a66d51 | 121 | volet_poumon_Position = 90 - remap(FeedBack_Servo_Poumon, Limit_max_Servo_Poumon, Limit_min_Servo_Poumon, 0, 90); |
POTLESS_2 | 10:aca745a66d51 | 122 | volet_fuite_Position = remap(FeedBack_Servo_Fuite, Limit_max_Servo_Fuite, Limit_min_Servo_Fuite, 0, 90); |
POTLESS_2 | 10:aca745a66d51 | 123 | |
POTLESS_2 | 9:04bfdfc029cb | 124 | //Fabrication de la chaine Date / heure |
POTLESS_2 | 9:04bfdfc029cb | 125 | seconds = time(NULL); |
POTLESS_2 | 9:04bfdfc029cb | 126 | char Time_buf[32]; |
POTLESS_2 | 9:04bfdfc029cb | 127 | strftime(Time_buf, 32, "%D %I-%M-%S ", localtime(&seconds)); |
POTLESS_2 | 9:04bfdfc029cb | 128 | |
POTLESS_2 | 9:04bfdfc029cb | 129 | //Fabrication de la chaine à enregistrer |
POTLESS_2 | 10:aca745a66d51 | 130 | sprintf(to_store,"<%s:%d:%d:%.2f:%.2f:%.2f:%d:%d:%d:%3.2f:%3.2f>", |
POTLESS_2 | 9:04bfdfc029cb | 131 | Time_buf, |
POTLESS_2 | 9:04bfdfc029cb | 132 | co2, |
POTLESS_2 | 9:04bfdfc029cb | 133 | ppO2, |
POTLESS_2 | 9:04bfdfc029cb | 134 | pression, |
POTLESS_2 | 9:04bfdfc029cb | 135 | Temp1, |
POTLESS_2 | 9:04bfdfc029cb | 136 | Temp2, |
POTLESS_2 | 9:04bfdfc029cb | 137 | Humid, |
POTLESS_2 | 9:04bfdfc029cb | 138 | CellO2_1, |
POTLESS_2 | 10:aca745a66d51 | 139 | CellO2_2, |
POTLESS_2 | 10:aca745a66d51 | 140 | volet_poumon_Position, |
POTLESS_2 | 10:aca745a66d51 | 141 | volet_fuite_Position); |
POTLESS_2 | 10:aca745a66d51 | 142 | } |
potless | 2:4a8bf1d53439 | 143 | } |
POTLESS_2 | 4:d84250f67dec | 144 | |
POTLESS_2 | 7:ad15c386e960 | 145 | void Affichage_moniteur() |
POTLESS_2 | 4:d84250f67dec | 146 | { |
POTLESS_2 | 10:aca745a66d51 | 147 | #ifndef VT100 |
POTLESS_2 | 9:04bfdfc029cb | 148 | printf("\r\n"); |
POTLESS_2 | 9:04bfdfc029cb | 149 | printf(" CO2 = %d ppm\r\n" , co2); |
POTLESS_2 | 9:04bfdfc029cb | 150 | printf(" PPO2 = %d mb\r\n", ppO2); |
POTLESS_2 | 9:04bfdfc029cb | 151 | printf(" Pression = %f msw\r\n", pression); |
POTLESS_2 | 10:aca745a66d51 | 152 | printf(" Temp MS5837 = %f C\r\n", Temp1); |
POTLESS_2 | 10:aca745a66d51 | 153 | printf(" Temp HTU21D = %f C\n\r", Temp2); |
POTLESS_2 | 9:04bfdfc029cb | 154 | printf(" Humidity = %d %%\n\r", Humid); |
POTLESS_2 | 8:a750d531b381 | 155 | printf("\n\r"); |
POTLESS_2 | 8:a750d531b381 | 156 | printf(" Cell O2 n 1 = %d\r\n" , CellO2_1); |
POTLESS_2 | 8:a750d531b381 | 157 | printf(" Cell O2 n 2 = %d\r\n" , CellO2_2); |
POTLESS_2 | 7:ad15c386e960 | 158 | printf("\r\n"); |
POTLESS_2 | 9:04bfdfc029cb | 159 | printf("\n"); |
POTLESS_2 | 10:aca745a66d51 | 160 | printf(" Volet Poumon = %3.2f%\r\n" , volet_poumon_Position); |
POTLESS_2 | 10:aca745a66d51 | 161 | printf(" Volet Fuite = %3.2f%\r\n" , volet_fuite_Position); |
POTLESS_2 | 10:aca745a66d51 | 162 | printf("\r\n"); |
POTLESS_2 | 9:04bfdfc029cb | 163 | printf("Temps d execution de la boucle = %f secondes\n", RATE); |
POTLESS_2 | 9:04bfdfc029cb | 164 | printf("\r\n", ""); |
POTLESS_2 | 9:04bfdfc029cb | 165 | printf("A enregistrer = %s\n", to_store); |
POTLESS_2 | 9:04bfdfc029cb | 166 | printf("\r\n"); |
POTLESS_2 | 10:aca745a66d51 | 167 | #endif |
POTLESS_2 | 9:04bfdfc029cb | 168 | |
POTLESS_2 | 10:aca745a66d51 | 169 | #ifdef VT100 |
POTLESS_2 | 8:a750d531b381 | 170 | printf(HOME); |
POTLESS_2 | 8:a750d531b381 | 171 | printf("\x1b[30m"); |
POTLESS_2 | 9:04bfdfc029cb | 172 | printf("\x1b[0m\r CO2 = \x1b[1m\x1b[K%d ppm\n", co2); |
POTLESS_2 | 9:04bfdfc029cb | 173 | printf("\x1b[0m\r PPO2 = \x1b[1m\x1b[K%d mb\n", ppO2); |
POTLESS_2 | 9:04bfdfc029cb | 174 | printf("\n"); |
POTLESS_2 | 9:04bfdfc029cb | 175 | printf("\x1b[0m\r Pression = \x1b[1m\x1b[K%.2f msw\n", pression); |
POTLESS_2 | 9:04bfdfc029cb | 176 | printf("\n"); |
POTLESS_2 | 10:aca745a66d51 | 177 | printf("\x1b[0m\r Temp MS5837 = \x1b[1m\x1b[K%.2f C\n", Temp1); |
POTLESS_2 | 10:aca745a66d51 | 178 | printf("\x1b[0m\r Temp HTU21D = \x1b[1m\x1b[K%.2f C\n", Temp2); |
POTLESS_2 | 9:04bfdfc029cb | 179 | printf("\n"); |
POTLESS_2 | 9:04bfdfc029cb | 180 | printf("\x1b[0m\r Humidity = \x1b[1m\x1b[K%d %\n", Humid); |
POTLESS_2 | 9:04bfdfc029cb | 181 | printf("\n"); |
POTLESS_2 | 8:a750d531b381 | 182 | printf("\x1b[0m\r Cell O2 n 1 = \x1b[1m\x1b[K%d\n", CellO2_1); |
POTLESS_2 | 8:a750d531b381 | 183 | printf("\x1b[0m\r Cell O2 n 2 = \x1b[1m\x1b[K%d\n", CellO2_2); |
POTLESS_2 | 8:a750d531b381 | 184 | printf("\n"); |
POTLESS_2 | 10:aca745a66d51 | 185 | printf("\x1b[0m\r Volet Poumon = \x1b[1m\x1b[K%3.2f%\n", volet_poumon_Position); |
POTLESS_2 | 10:aca745a66d51 | 186 | printf("\x1b[0m\r Volet Fuite = \x1b[1m\x1b[K%3.2f%\n", volet_fuite_Position); |
POTLESS_2 | 10:aca745a66d51 | 187 | printf("\n"); |
POTLESS_2 | 9:04bfdfc029cb | 188 | printf("\x1b[0m\r Temps d execution de la boucle = \x1b[1m\x1b[K%f secondes\n", RATE); |
POTLESS_2 | 9:04bfdfc029cb | 189 | printf("\r\n", ""); |
POTLESS_2 | 9:04bfdfc029cb | 190 | printf("\x1b[0m\r A enregistrer = \x1b[1m\x1b[K%s\n", to_store); |
POTLESS_2 | 9:04bfdfc029cb | 191 | printf("\r\n", ""); |
POTLESS_2 | 10:aca745a66d51 | 192 | #endif |
POTLESS_2 | 4:d84250f67dec | 193 | } |
POTLESS_2 | 4:d84250f67dec | 194 | |
POTLESS_2 | 7:ad15c386e960 | 195 | //Callback de l'intérruption des envois de commandes au Cozir |
POTLESS_2 | 6:ebed9093d661 | 196 | void callbackParam() |
POTLESS_2 | 4:d84250f67dec | 197 | { |
POTLESS_2 | 6:ebed9093d661 | 198 | while(serialMonit.readable()) { |
POTLESS_2 | 6:ebed9093d661 | 199 | if (indexParam == sizeParam) //éviter la saturation du buffer |
POTLESS_2 | 6:ebed9093d661 | 200 | serialMonit.getc(); |
POTLESS_2 | 6:ebed9093d661 | 201 | else |
POTLESS_2 | 6:ebed9093d661 | 202 | param [indexParam++] = serialMonit.getc();//chargement du buffer dans le message |
POTLESS_2 | 6:ebed9093d661 | 203 | if ((indexParam == sizeParam) || (param[indexParam -1] == '\n')) {//le message est complet ou nouvelle ligne ou autre si on veut... |
POTLESS_2 | 6:ebed9093d661 | 204 | param[indexParam] = 0; |
POTLESS_2 | 6:ebed9093d661 | 205 | newParamFlag = true; |
POTLESS_2 | 6:ebed9093d661 | 206 | } |
POTLESS_2 | 4:d84250f67dec | 207 | } |
POTLESS_2 | 6:ebed9093d661 | 208 | } |
POTLESS_2 | 4:d84250f67dec | 209 | |
POTLESS_2 | 9:04bfdfc029cb | 210 | |
POTLESS_2 | 9:04bfdfc029cb | 211 | //Callback de l'intérruption des envois de commandes depuis Android |
POTLESS_2 | 9:04bfdfc029cb | 212 | void callbackAndroid() |
POTLESS_2 | 9:04bfdfc029cb | 213 | { |
POTLESS_2 | 9:04bfdfc029cb | 214 | while(android.readable()) { |
POTLESS_2 | 9:04bfdfc029cb | 215 | if (indexAndroid == sizeAndroid) //éviter la saturation du buffer |
POTLESS_2 | 9:04bfdfc029cb | 216 | android.getc(); |
POTLESS_2 | 9:04bfdfc029cb | 217 | else |
POTLESS_2 | 9:04bfdfc029cb | 218 | Android [indexAndroid++] = android.getc();//chargement du buffer dans le message |
POTLESS_2 | 9:04bfdfc029cb | 219 | if ((indexAndroid == sizeAndroid) || (Android[indexAndroid -1] == '\n')) {//le message est complet ou nouvelle ligne ou autre si on veut... |
POTLESS_2 | 9:04bfdfc029cb | 220 | Android[indexAndroid] = 0; |
POTLESS_2 | 9:04bfdfc029cb | 221 | newAndroidFlag = true; |
POTLESS_2 | 9:04bfdfc029cb | 222 | } |
POTLESS_2 | 9:04bfdfc029cb | 223 | } |
POTLESS_2 | 9:04bfdfc029cb | 224 | } |
POTLESS_2 | 9:04bfdfc029cb | 225 | void Decoding_Message(char message []) |
POTLESS_2 | 9:04bfdfc029cb | 226 | { |
POTLESS_2 | 9:04bfdfc029cb | 227 | char *commande = 0; |
POTLESS_2 | 9:04bfdfc029cb | 228 | int valeur = 0; |
POTLESS_2 | 9:04bfdfc029cb | 229 | |
POTLESS_2 | 9:04bfdfc029cb | 230 | sscanf(message,"%s %d",&commande , &valeur); |
POTLESS_2 | 9:04bfdfc029cb | 231 | |
POTLESS_2 | 9:04bfdfc029cb | 232 | if ((char)commande == 'T') { |
POTLESS_2 | 9:04bfdfc029cb | 233 | set_time(valeur); |
POTLESS_2 | 10:aca745a66d51 | 234 | } else if ((char)commande == 'P'){ |
POTLESS_2 | 10:aca745a66d51 | 235 | servo_poumon = remap(valeur, 0, 90, 0, 100) / 100.f; |
POTLESS_2 | 10:aca745a66d51 | 236 | printf(" Servo Poumon = %f\r\n", remap(valeur, 0, 90, 0, 100) / 100.f); |
POTLESS_2 | 10:aca745a66d51 | 237 | } else if ((char)commande == 'F'){ |
POTLESS_2 | 10:aca745a66d51 | 238 | servo_fuite = 1 - remap(valeur, 0, 90, 0, 100) / 100.f; |
POTLESS_2 | 10:aca745a66d51 | 239 | printf(" Servo Fuite = %f\r\n", 1 - remap(valeur, 0, 90, 0, 100) / 100.f); |
POTLESS_2 | 10:aca745a66d51 | 240 | } else if ((char)commande == 'R') { |
POTLESS_2 | 10:aca745a66d51 | 241 | NVIC_SystemReset(); |
POTLESS_2 | 10:aca745a66d51 | 242 | }else { |
POTLESS_2 | 9:04bfdfc029cb | 243 | sensors.cozirSend(message); |
POTLESS_2 | 9:04bfdfc029cb | 244 | } |
POTLESS_2 | 9:04bfdfc029cb | 245 | |
POTLESS_2 | 9:04bfdfc029cb | 246 | //wait_ms(500); |
POTLESS_2 | 9:04bfdfc029cb | 247 | strcpy(param," "); |
POTLESS_2 | 9:04bfdfc029cb | 248 | indexParam = 0; |
POTLESS_2 | 9:04bfdfc029cb | 249 | newParamFlag = false; |
POTLESS_2 | 9:04bfdfc029cb | 250 | } |
POTLESS_2 | 9:04bfdfc029cb | 251 | |
POTLESS_2 | 9:04bfdfc029cb | 252 | void Decoding_Message_Android(char message []) |
POTLESS_2 | 9:04bfdfc029cb | 253 | { |
POTLESS_2 | 9:04bfdfc029cb | 254 | char *commande = 0; |
POTLESS_2 | 9:04bfdfc029cb | 255 | int valeur = 0; |
POTLESS_2 | 9:04bfdfc029cb | 256 | |
POTLESS_2 | 9:04bfdfc029cb | 257 | sscanf(message,"%s %d",&commande , &valeur); |
POTLESS_2 | 9:04bfdfc029cb | 258 | |
POTLESS_2 | 9:04bfdfc029cb | 259 | if ((char)commande == 'T') { |
POTLESS_2 | 9:04bfdfc029cb | 260 | set_time(valeur); |
POTLESS_2 | 10:aca745a66d51 | 261 | } else if ((char)commande == 'P'){ |
POTLESS_2 | 10:aca745a66d51 | 262 | servo_poumon = remap(valeur, 0, 90, 0, 100) / 100.f; |
POTLESS_2 | 10:aca745a66d51 | 263 | printf(" Servo Poumon = %f\r\n", remap(valeur, 0, 90, 0, 100) / 100.f); |
POTLESS_2 | 10:aca745a66d51 | 264 | } else if ((char)commande == 'F'){ |
POTLESS_2 | 10:aca745a66d51 | 265 | servo_fuite = 1 - remap(valeur, 0, 90, 0, 100) / 100.f; |
POTLESS_2 | 10:aca745a66d51 | 266 | printf(" Servo Fuite = %f\r\n", 1 - remap(valeur, 0, 90, 0, 100) / 100.f); |
POTLESS_2 | 9:04bfdfc029cb | 267 | } else if ((char)commande == 'R') { |
POTLESS_2 | 9:04bfdfc029cb | 268 | NVIC_SystemReset(); |
POTLESS_2 | 9:04bfdfc029cb | 269 | } |
POTLESS_2 | 9:04bfdfc029cb | 270 | |
POTLESS_2 | 9:04bfdfc029cb | 271 | //wait_ms(500); |
POTLESS_2 | 9:04bfdfc029cb | 272 | strcpy(Android," "); |
POTLESS_2 | 9:04bfdfc029cb | 273 | indexAndroid = 0; |
POTLESS_2 | 9:04bfdfc029cb | 274 | newAndroidFlag = false; |
POTLESS_2 | 9:04bfdfc029cb | 275 | } |
POTLESS_2 | 9:04bfdfc029cb | 276 | |
POTLESS_2 | 10:aca745a66d51 | 277 | //Calibration des limites de feedback des servos |
POTLESS_2 | 10:aca745a66d51 | 278 | void Calibration_servo() |
POTLESS_2 | 10:aca745a66d51 | 279 | { |
POTLESS_2 | 10:aca745a66d51 | 280 | //Servos, calibration du feedback |
POTLESS_2 | 10:aca745a66d51 | 281 | printf(" Check Servos :\r\n"); |
POTLESS_2 | 10:aca745a66d51 | 282 | printf("\r\n"); |
POTLESS_2 | 10:aca745a66d51 | 283 | 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 | 284 | servo_fuite.period(0.001); |
POTLESS_2 | 10:aca745a66d51 | 285 | //Rentrer les servos à fond |
POTLESS_2 | 10:aca745a66d51 | 286 | servo_poumon = 0; |
POTLESS_2 | 10:aca745a66d51 | 287 | servo_fuite = 0; |
POTLESS_2 | 10:aca745a66d51 | 288 | wait(4); |
POTLESS_2 | 10:aca745a66d51 | 289 | |
POTLESS_2 | 10:aca745a66d51 | 290 | Limit_min_Servo_Poumon = FeedBack_Servo_Poumon.read(); |
POTLESS_2 | 10:aca745a66d51 | 291 | wait_ms(100); |
POTLESS_2 | 10:aca745a66d51 | 292 | Limit_min_Servo_Fuite = FeedBack_Servo_Fuite.read(); |
POTLESS_2 | 10:aca745a66d51 | 293 | |
POTLESS_2 | 10:aca745a66d51 | 294 | printf(" FeedBack Servo POUMON min = %f\n", Limit_min_Servo_Poumon); |
POTLESS_2 | 10:aca745a66d51 | 295 | printf(" FeedBack Servo FUITE min = %f\n", Limit_min_Servo_Fuite); |
POTLESS_2 | 10:aca745a66d51 | 296 | printf("\r\n"); |
POTLESS_2 | 10:aca745a66d51 | 297 | |
POTLESS_2 | 10:aca745a66d51 | 298 | //Sortir les servos à fond |
POTLESS_2 | 10:aca745a66d51 | 299 | servo_poumon = 1; |
POTLESS_2 | 10:aca745a66d51 | 300 | servo_fuite = 1; |
POTLESS_2 | 10:aca745a66d51 | 301 | wait(4); |
POTLESS_2 | 10:aca745a66d51 | 302 | |
POTLESS_2 | 10:aca745a66d51 | 303 | Limit_max_Servo_Poumon = FeedBack_Servo_Poumon.read(); |
POTLESS_2 | 10:aca745a66d51 | 304 | wait_ms(100); |
POTLESS_2 | 10:aca745a66d51 | 305 | Limit_max_Servo_Fuite = FeedBack_Servo_Fuite.read(); |
POTLESS_2 | 10:aca745a66d51 | 306 | |
POTLESS_2 | 10:aca745a66d51 | 307 | printf(" FeedBack Servo POUMON Max = %f\n", Limit_max_Servo_Poumon); |
POTLESS_2 | 10:aca745a66d51 | 308 | printf(" FeedBack Servo FUITE Max = %f\n", Limit_max_Servo_Fuite); |
POTLESS_2 | 10:aca745a66d51 | 309 | printf("\r\n"); |
POTLESS_2 | 10:aca745a66d51 | 310 | |
POTLESS_2 | 10:aca745a66d51 | 311 | //Position milieu |
POTLESS_2 | 10:aca745a66d51 | 312 | servo_poumon = 0.5; |
POTLESS_2 | 10:aca745a66d51 | 313 | servo_fuite = 0.5; |
POTLESS_2 | 10:aca745a66d51 | 314 | wait(4); |
POTLESS_2 | 10:aca745a66d51 | 315 | |
POTLESS_2 | 10:aca745a66d51 | 316 | //Mesure du delta consigne / feedback |
POTLESS_2 | 10:aca745a66d51 | 317 | Delta_FB_1 = abs(remap(FeedBack_Servo_Poumon.read(), Limit_max_Servo_Poumon, Limit_min_Servo_Poumon, 0, 90) - 45); |
POTLESS_2 | 10:aca745a66d51 | 318 | Delta_FB_2 = abs(remap(FeedBack_Servo_Fuite.read(), Limit_max_Servo_Fuite, Limit_min_Servo_Fuite, 0, 90) - 45); |
POTLESS_2 | 10:aca745a66d51 | 319 | |
POTLESS_2 | 10:aca745a66d51 | 320 | printf(" Delta Servo 1 = %f\n", Delta_FB_1); |
POTLESS_2 | 10:aca745a66d51 | 321 | printf(" Delta Servo 2 = %f\n", Delta_FB_2); |
POTLESS_2 | 10:aca745a66d51 | 322 | |
POTLESS_2 | 10:aca745a66d51 | 323 | if(Delta_FB_1 > 10 || Delta_FB_2 > 10) printf(" Delta Servos non satisfaisant...\r\n\r\n"); |
POTLESS_2 | 10:aca745a66d51 | 324 | } |
POTLESS_2 | 10:aca745a66d51 | 325 | |
POTLESS_2 | 4:d84250f67dec | 326 | int main() |
POTLESS_2 | 4:d84250f67dec | 327 | { |
POTLESS_2 | 10:aca745a66d51 | 328 | |
POTLESS_2 | 9:04bfdfc029cb | 329 | //UNIX TIMESTAMP depuis le erminal MAC = date +%s + 7200 pour heure d'été..... |
POTLESS_2 | 10:aca745a66d51 | 330 | Calibration_servo(); |
POTLESS_2 | 10:aca745a66d51 | 331 | |
POTLESS_2 | 10:aca745a66d51 | 332 | sensors.Sensors_INIT(true, true, 5, SPOOLING, DIGI_FILTER32, CALIB_AIR); |
POTLESS_2 | 6:ebed9093d661 | 333 | |
POTLESS_2 | 6:ebed9093d661 | 334 | serialMonit.attach(&callbackParam, Serial::RxIrq); |
POTLESS_2 | 6:ebed9093d661 | 335 | |
POTLESS_2 | 9:04bfdfc029cb | 336 | android.attach(&callbackAndroid, Serial::RxIrq); |
POTLESS_2 | 9:04bfdfc029cb | 337 | |
POTLESS_2 | 7:ad15c386e960 | 338 | serialMonit.printf(" Demarrage...\r\n\r\n Entrez les comandes COZIR si besoin :\r\n"); |
POTLESS_2 | 6:ebed9093d661 | 339 | |
POTLESS_2 | 10:aca745a66d51 | 340 | thread.start(Get_Info_thread); |
POTLESS_2 | 9:04bfdfc029cb | 341 | |
POTLESS_2 | 7:ad15c386e960 | 342 | thread.set_priority(osPriorityRealtime); |
POTLESS_2 | 9:04bfdfc029cb | 343 | |
POTLESS_2 | 8:a750d531b381 | 344 | printf(CLS); |
POTLESS_2 | 9:04bfdfc029cb | 345 | |
POTLESS_2 | 7:ad15c386e960 | 346 | while (true) { |
POTLESS_2 | 6:ebed9093d661 | 347 | |
POTLESS_2 | 7:ad15c386e960 | 348 | //Démarrage du Timer mesurant le temps d'éxecution du code |
POTLESS_2 | 7:ad15c386e960 | 349 | REAL_RATE.start(); |
POTLESS_2 | 7:ad15c386e960 | 350 | |
POTLESS_2 | 7:ad15c386e960 | 351 | Affichage_moniteur(); |
POTLESS_2 | 9:04bfdfc029cb | 352 | |
POTLESS_2 | 6:ebed9093d661 | 353 | if (newParamFlag) { |
POTLESS_2 | 6:ebed9093d661 | 354 | wait_ms(500); |
POTLESS_2 | 6:ebed9093d661 | 355 | serialMonit.printf("Param = %s\r\n", param); |
POTLESS_2 | 9:04bfdfc029cb | 356 | Decoding_Message(param); |
POTLESS_2 | 9:04bfdfc029cb | 357 | } |
POTLESS_2 | 9:04bfdfc029cb | 358 | |
POTLESS_2 | 9:04bfdfc029cb | 359 | if (newAndroidFlag) { |
POTLESS_2 | 6:ebed9093d661 | 360 | wait_ms(500); |
POTLESS_2 | 9:04bfdfc029cb | 361 | serialMonit.printf("Android = %s\r\n", Android); |
POTLESS_2 | 9:04bfdfc029cb | 362 | Decoding_Message_Android(Android); |
POTLESS_2 | 6:ebed9093d661 | 363 | } |
POTLESS_2 | 7:ad15c386e960 | 364 | |
POTLESS_2 | 9:04bfdfc029cb | 365 | //Vers Android |
POTLESS_2 | 9:04bfdfc029cb | 366 | if (NEED_ANDROID_OUTPUT == 1) { |
POTLESS_2 | 9:04bfdfc029cb | 367 | ANDROID(to_store); |
POTLESS_2 | 9:04bfdfc029cb | 368 | //build_send_Message_int("t", co2, ppO2); |
POTLESS_2 | 9:04bfdfc029cb | 369 | //build_send_Message_float("v", Temp1, pression); |
POTLESS_2 | 9:04bfdfc029cb | 370 | //build_send_Message_int("m", CellO2_1, CellO2_2); |
POTLESS_2 | 9:04bfdfc029cb | 371 | } |
POTLESS_2 | 9:04bfdfc029cb | 372 | |
POTLESS_2 | 9:04bfdfc029cb | 373 | wait_ms(500); |
POTLESS_2 | 9:04bfdfc029cb | 374 | |
POTLESS_2 | 9:04bfdfc029cb | 375 | sensors.Write_SD((string)to_store); |
POTLESS_2 | 9:04bfdfc029cb | 376 | |
POTLESS_2 | 7:ad15c386e960 | 377 | //Arrêt du Timer mesurant le temps d'éxecution du code |
POTLESS_2 | 7:ad15c386e960 | 378 | REAL_RATE.stop(); |
POTLESS_2 | 7:ad15c386e960 | 379 | //Définition de la nouvelle valeur du temps d'échantillonage du PID. |
POTLESS_2 | 7:ad15c386e960 | 380 | RATE = REAL_RATE.read(); |
POTLESS_2 | 7:ad15c386e960 | 381 | //Reset du Timer |
POTLESS_2 | 7:ad15c386e960 | 382 | REAL_RATE.reset(); |
POTLESS_2 | 9:04bfdfc029cb | 383 | |
POTLESS_2 | 4:d84250f67dec | 384 | } |
POTLESS_2 | 4:d84250f67dec | 385 | } |