mbed-os github
Dependencies: ADS1015 Faulhaber HTU21D_mod MS5837_potless Sensor_Head_RevB_3 USBDevice_dfu Utilsdfu beep
Fork of ARNSRS_testDFU by
Diff: main.cpp
- Revision:
- 11:b2feed92584a
- Parent:
- 10:aca745a66d51
- Child:
- 12:7f3aadd79f89
diff -r aca745a66d51 -r b2feed92584a main.cpp --- a/main.cpp Thu Nov 02 10:39:53 2017 +0000 +++ b/main.cpp Sun Nov 05 16:03:02 2017 +0000 @@ -16,6 +16,18 @@ //Sortie en mode VT100, à commenter si on veut une sortie type Arduino //#define VT100 +//Mode Delta constant entre les servos à commenter si on en veut pas +//#define DELTA_MODE +float delta = 0.0f; + +#ifndef DELTA_MODE +int DELTA_FLAG = 0; +#endif + +#ifdef DELTA_MODE +int DELTA_FLAG = 1; +#endif + #if NEED_ANDROID_OUTPUT #define ANDROID(...) { android.printf(__VA_ARGS__); } #else @@ -33,14 +45,14 @@ //pour Param Cozir const int sizeParam = 20; -char param[sizeParam ]; -int indexParam; +char param[sizeParam]; +volatile int indexParam = 0; bool newParamFlag = false; //pour Commandes Android const int sizeAndroid = 20; -char Android[sizeParam ]; -int indexAndroid; +char Android[sizeAndroid]; +volatile int indexAndroid = 0; bool newAndroidFlag = false; //Variables de stockage des infos capteurs @@ -54,6 +66,7 @@ //Mesure du tempsd'éxecution du loop Timer REAL_RATE; float RATE = 0; +float RATE_TRUE = 0; //HTU21D HTU21D temphumid(PB_9, PB_8); //Temp humid sensor || SDA, SCL @@ -127,7 +140,7 @@ strftime(Time_buf, 32, "%D %I-%M-%S ", localtime(&seconds)); //Fabrication de la chaine à enregistrer - sprintf(to_store,"<%s:%d:%d:%.2f:%.2f:%.2f:%d:%d:%d:%3.2f:%3.2f>", + sprintf(to_store,"<%s:%d:%d:%.2f:%.2f:%.2f:%d:%d:%d:%3.2f:%3.2f:%d>", Time_buf, co2, ppO2, @@ -138,7 +151,8 @@ CellO2_1, CellO2_2, volet_poumon_Position, - volet_fuite_Position); + volet_fuite_Position, + DELTA_FLAG); } } @@ -160,7 +174,7 @@ printf(" Volet Poumon = %3.2f%\r\n" , volet_poumon_Position); printf(" Volet Fuite = %3.2f%\r\n" , volet_fuite_Position); printf("\r\n"); - printf("Temps d execution de la boucle = %f secondes\n", RATE); + printf("Temps d execution de la boucle = %f secondes\n", (RATE + RATE_TRUE) / 1000); printf("\r\n", ""); printf("A enregistrer = %s\n", to_store); printf("\r\n"); @@ -185,14 +199,14 @@ printf("\x1b[0m\r Volet Poumon = \x1b[1m\x1b[K%3.2f%\n", volet_poumon_Position); printf("\x1b[0m\r Volet Fuite = \x1b[1m\x1b[K%3.2f%\n", volet_fuite_Position); printf("\n"); - printf("\x1b[0m\r Temps d execution de la boucle = \x1b[1m\x1b[K%f secondes\n", RATE); + printf("\x1b[0m\r Temps d execution de la boucle = \x1b[1m\x1b[K%f secondes\n", (RATE + RATE_TRUE) / 1000); printf("\r\n", ""); printf("\x1b[0m\r A enregistrer = \x1b[1m\x1b[K%s\n", to_store); printf("\r\n", ""); #endif } -//Callback de l'intérruption des envois de commandes au Cozir +//Callback de l'intérruption des envois de commandes depuis le terminal void callbackParam() { while(serialMonit.readable()) { @@ -207,7 +221,6 @@ } } - //Callback de l'intérruption des envois de commandes depuis Android void callbackAndroid() { @@ -222,6 +235,7 @@ } } } + void Decoding_Message(char message []) { char *commande = 0; @@ -231,19 +245,37 @@ if ((char)commande == 'T') { set_time(valeur); - } else if ((char)commande == 'P'){ + } else if ((char)commande == 'I'){ servo_poumon = remap(valeur, 0, 90, 0, 100) / 100.f; + #ifdef DELTA_MODE + float Sf = servo_poumon + remap(delta, 0, 90, 0, 100) / 100.f; + if(Sf >= 0 && Sf <= 90) + servo_fuite = Sf; + #endif printf(" Servo Poumon = %f\r\n", remap(valeur, 0, 90, 0, 100) / 100.f); - } else if ((char)commande == 'F'){ + } else if ((char)commande == 'O'){ servo_fuite = 1 - remap(valeur, 0, 90, 0, 100) / 100.f; printf(" Servo Fuite = %f\r\n", 1 - remap(valeur, 0, 90, 0, 100) / 100.f); + } else if ((char)commande == 'D') { + delta = valeur; + #ifdef DELTA_MODE + float Sf = servo_poumon + remap(delta, 0, 90, 0, 100) / 100.f; + if(Sf >= 0 && Sf <= 90) + servo_fuite = Sf; + #endif } else if ((char)commande == 'R') { NVIC_SystemReset(); + ///////////////////////////////////////// + //Pour rajouter une commande + //} else if ((char)commande == 'X') { + // attribuer à une VARIABLE = valeur; + // ou une action, avec ou sans valeur + ///////////////////////////////////////// }else { sensors.cozirSend(message); } - //wait_ms(500); + //wait_ms(100); strcpy(param," "); indexParam = 0; newParamFlag = false; @@ -258,17 +290,37 @@ if ((char)commande == 'T') { set_time(valeur); - } else if ((char)commande == 'P'){ + } else if ((char)commande == 'I'){ servo_poumon = remap(valeur, 0, 90, 0, 100) / 100.f; + #ifdef DELTA_MODE + float Sf = servo_poumon + remap(delta, 0, 90, 0, 100) / 100.f; + if(Sf >= 0 && Sf <= 90) + servo_fuite = Sf; + #endif printf(" Servo Poumon = %f\r\n", remap(valeur, 0, 90, 0, 100) / 100.f); - } else if ((char)commande == 'F'){ + } else if ((char)commande == 'O'){ servo_fuite = 1 - remap(valeur, 0, 90, 0, 100) / 100.f; - printf(" Servo Fuite = %f\r\n", 1 - remap(valeur, 0, 90, 0, 100) / 100.f); + printf(" Servo Fuite = %f\r\n", 1 - remap(valeur, 0, 90, 0, 100) / 100.f); + } else if ((char)commande == 'D') { + delta = valeur; + #ifdef DELTA_MODE + float Sf = servo_poumon + remap(delta, 0, 90, 0, 100) / 100.f; + if(Sf >= 0 && Sf <= 90) + servo_fuite = Sf; + #endif + ///////////////////////////////////////// + //Pour rajouter une commande + //} else if ((char)commande == 'X') { + // attribuer à une VARIABLE = valeur; + // ou une action, avec ou sans valeur + ///////////////////////////////////////// } else if ((char)commande == 'R') { NVIC_SystemReset(); + } else { + sensors.cozirSend(message); } - //wait_ms(500); + //wait_ms(100); strcpy(Android," "); indexAndroid = 0; newAndroidFlag = false; @@ -321,15 +373,21 @@ printf(" Delta Servo 2 = %f\n", Delta_FB_2); if(Delta_FB_1 > 10 || Delta_FB_2 > 10) printf(" Delta Servos non satisfaisant...\r\n\r\n"); + +#ifdef DELTA_MODE + //Position initial delta + servo_poumon = 0.5; + servo_fuite = 0.5 + remap(delta, 0, 90, 0, 100) / 100.f; +#endif } int main() -{ +{ + //UNIX TIMESTAMP depuis le erminal MAC = date +%s + 7200 pour heure d'été..... - //UNIX TIMESTAMP depuis le erminal MAC = date +%s + 7200 pour heure d'été..... Calibration_servo(); - sensors.Sensors_INIT(true, true, 5, SPOOLING, DIGI_FILTER32, CALIB_AIR); + sensors.Sensors_INIT(false, true, 5, SPOOLING, DIGI_FILTER32, CALIB_AIR); serialMonit.attach(&callbackParam, Serial::RxIrq); @@ -340,8 +398,10 @@ thread.start(Get_Info_thread); thread.set_priority(osPriorityRealtime); - + +#ifdef VT100 printf(CLS); +#endif while (true) { @@ -351,13 +411,11 @@ Affichage_moniteur(); if (newParamFlag) { - wait_ms(500); serialMonit.printf("Param = %s\r\n", param); Decoding_Message(param); } if (newAndroidFlag) { - wait_ms(500); serialMonit.printf("Android = %s\r\n", Android); Decoding_Message_Android(Android); } @@ -365,13 +423,8 @@ //Vers Android if (NEED_ANDROID_OUTPUT == 1) { ANDROID(to_store); - //build_send_Message_int("t", co2, ppO2); - //build_send_Message_float("v", Temp1, pression); - //build_send_Message_int("m", CellO2_1, CellO2_2); } - wait_ms(500); - sensors.Write_SD((string)to_store); //Arrêt du Timer mesurant le temps d'éxecution du code @@ -380,6 +433,9 @@ RATE = REAL_RATE.read(); //Reset du Timer REAL_RATE.reset(); - + + //Pour ralentir le code à 1 seconde fixe quelque soit les intéruptions du loop.... + RATE_TRUE = (1000 - (RATE / 1000)); + wait_ms(RATE_TRUE); } }