mbed-os github

Dependencies:   ADS1015 Faulhaber HTU21D_mod MS5837_potless Sensor_Head_RevB_3 USBDevice_dfu Utilsdfu beep

Fork of ARNSRS_testDFU by POTLESS

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?

UserRevisionLine numberNew 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 }