mbed-os github

Dependencies:   ADS1015 Faulhaber HTU21D_mod MS5837_potless Sensor_Head_RevB_3 USBDevice_dfu Utilsdfu beep

Fork of ARNSRS_testDFU by POTLESS

Files at this revision

API Documentation at this revision

Comitter:
POTLESS_2
Date:
Tue Feb 20 16:52:22 2018 +0000
Parent:
28:59b416b8e4ac
Child:
30:7a16a66d76f3
Commit message:
derni?re version

Changed in this revision

Faulhaber.lib Show annotated file Show diff for this revision Revisions of this file
Sensor_Head_RevB_3.lib Show annotated file Show diff for this revision Revisions of this file
Utils.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
main.h Show annotated file Show diff for this revision Revisions of this file
mbed-os.lib Show annotated file Show diff for this revision Revisions of this file
sd-driver-hs.lib Show annotated file Show diff for this revision Revisions of this file
sd-driver.lib Show diff for this revision Revisions of this file
--- a/Faulhaber.lib	Tue Feb 13 16:57:47 2018 +0000
+++ b/Faulhaber.lib	Tue Feb 20 16:52:22 2018 +0000
@@ -1,1 +1,1 @@
-https://os.mbed.com/teams/POTLESS/code/Faulhaber/#7c2d5c1da846
+https://os.mbed.com/teams/POTLESS/code/Faulhaber/#e9ad5c23d6be
--- a/Sensor_Head_RevB_3.lib	Tue Feb 13 16:57:47 2018 +0000
+++ b/Sensor_Head_RevB_3.lib	Tue Feb 20 16:52:22 2018 +0000
@@ -1,1 +1,1 @@
-https://os.mbed.com/teams/POTLESS/code/Sensor_Head_RevB_3/#76c2e00a5f24
+https://os.mbed.com/teams/POTLESS/code/Sensor_Head_RevB_3/#310d9fddcb08
--- a/Utils.lib	Tue Feb 13 16:57:47 2018 +0000
+++ b/Utils.lib	Tue Feb 20 16:52:22 2018 +0000
@@ -1,1 +1,1 @@
-https://os.mbed.com/teams/POTLESS/code/Utils/#0f3b6e6677ef
+https://os.mbed.com/teams/POTLESS/code/Utils/#8bae97034114
--- a/main.cpp	Tue Feb 13 16:57:47 2018 +0000
+++ b/main.cpp	Tue Feb 20 16:52:22 2018 +0000
@@ -1,65 +1,10 @@
-/*
-
-Câblage complet STM32L476RG :
-
-- Port SPI carte SD :
-
-MOSI        ->      PA_7
-MISO        ->      PA_6
-SCK         ->      PA_5
-CS          ->      PB_6
-
-- Sensor Head :
-
-Alim en 3.3v
-
-SCL         ->      PB_8
-SDA         ->      PB_9
-TX          ->      PC_12
-RX          ->      PD_2
-AlertRdy    ->      PA_11
-
-
-- HC_06 :
-
-Alim en 3.3v ou 5v
-
-TX          ->      PC_10
-RX          ->      PC_11
-
-- STM32L476RG sur carte alim AQL :
-
-Reférence drv8839 : http://www.ti.com/lit/ds/symlink/drv8839.pdf
-
-Volet Fuite :
-PWM     ->      PA_8        ->      Jump_4 & Jump_5
-FWD     ->      PB_4        ->      Jump_2
-REV     ->      PB_5        ->      Jump_1
-nSleep  ->      PC_5        ->      Jump_3
-Ch_A    ->      PB_9        ->      Codeur1 2
-Ch_B    ->      PB_8        ->      Codeur1 1
-
-Volet Poumon :
-PWM     ->      PB_1        ->      Jump_4 & Jump_5
-FWD     ->      PB_14       ->      Jump_2
-REV     ->      PB_13       ->      Jump_1
-nSleep  ->      PC_6        ->      Jump_3
-Ch_A    ->      PB_2        ->      Codeur2 2    
-Ch_B    ->      PB_1        ->      Codeur2 1
-
-Test POWER :
-
-V_usb    ->      PC_4        ->      MCU 1
-V_pile   ->      PA_10       ->      MCU 2
-
-*/
-
 #include "mbed.h"
 #include <string>
 #include "Sensor_head_revB.h"
 #include "HTU21D.h"
 #include "PID.h"
 #include "Faulhaber.h"
+#include "Utils.h"
 
 //Commandes  des servos
 #define PWM_SERVO_POUMON PB_15
@@ -78,6 +23,9 @@
 #define Channel_B_SERVO_FUITE PB_9
 #define HOME_SERVO_FUITE 90
 
+//Un peu plus ou un peu moins de sortie moniteurs pour du debug.... 
+#define DEBUG_MAIN 0
+
 //Ecrit dans le moniteur série de la tablette à 115200 bds si sur 1, penser à mettre NEED_CONSOLE_OUTPUT à 0
 #define NEED_ANDROID_OUTPUT 1
 
@@ -99,6 +47,13 @@
 #define ANDROID(...)
 #endif
 
+#if DEBUG_MAIN
+#define DEBUG_M(...) { serialMonit.printf(__VA_ARGS__); fflush(stdout);}
+#else
+#define DEBUG_M(...)
+#endif
+
+       
 //PinName pwm, PinName nSleep, PinName fwd, PinName rev, PinName channelA, PinName channelB, int pulsesPerRev, int Rapport, Encoding encoding = X2_ENCODING
 Faulhaber Servo_Poumon("Servo_Poumon", PWM_SERVO_POUMON, nSleep_SERVO_POUMON, FWD_SERVO_POUMON, REV_SERVO_POUMON, Channel_A_SERVO_POUMON, Channel_B_SERVO_POUMON, 16, 207, Faulhaber::X2_ENCODING);
 //Faulhaber Servo_Fuite("Servo_Fuite", PWM_SERVO_FUITE, nSleep_SERVO_FUITE, FWD_SERVO_FUITE, REV_SERVO_FUITE, 1, Channel_A_SERVO_FUITE, Channel_B_SERVO_FUITE, 16, 207, Faulhaber::X2_ENCODING);
@@ -128,6 +83,9 @@
 //Flag pour interrompre l'affichage si on veut...
 bool FLAG_AFF = true;
 
+//Flag pour interrompre l'enregistrement si on veut...
+bool FLAG_REC = true;
+
 //Variables de stockage des infos capteurs
 int co2 = 0;
 float pression = 0;
@@ -144,7 +102,7 @@
 Timer REAL_RATE;
 float RATE = 0;
 float RATE_TRUE = 0;
-float Ref_Time = 1.0; //La durée de la boucle désirée...
+float Ref_Time = 2.0; //La durée de la boucle désirée...
 
 //HTU21D sur l'I2C
 HTU21D temphumid(PB_9, PB_8); //Temp humid sensor || SDA, SCL
@@ -188,15 +146,41 @@
 
 //Boolean du status de l'appareil, en mode SECU ou nominal
 bool EN_MODE_SECU = false;
-AnalogIn V_USB(PC_4);
+DigitalIn V_USB(PA_0);
 float Vusb = 1;
 
 //Interruption user button
 InterruptIn button(USER_BUTTON);
 volatile int  GO = 0;
 
+void Affichage()
+{
+
+    serialMonit.printf("\r\n");
+    serialMonit.printf("  CO2             = %d ppm\r\n"  , co2);
+    serialMonit.printf("  PPO2            = %d mb\r\n", ppO2);
+    serialMonit.printf("  OTU             = %d \r\n", OTU);
+    serialMonit.printf("  Pression        = %f msw\r\n", pression);
+    serialMonit.printf("  Temp MS5837     = %f C\r\n", Temp1);
+    serialMonit.printf("  Temp HTU21D     = %f C\n\r", Temp2);
+    serialMonit.printf("  Humidity        = %d %%\n\r", Humid);
+    serialMonit.printf("\n\r");
+    serialMonit.printf("  Cell O2 n 1     = %d\r\n"  , CellO2_1);
+    serialMonit.printf("  Cell O2 n 2     = %d\r\n"  , CellO2_2);
+    serialMonit.printf("\r\n");
+    serialMonit.printf("  Volet Poumon    = %f\r\n"  , volet_poumon_Position);
+    serialMonit.printf("  Volet Fuite     = %f\r\n"  , volet_fuite_Position);
+    serialMonit.printf("\r\n");
+    serialMonit.printf("  Temps d execution de la boucle = %f seconde(s)\n", (RATE + RATE_TRUE / 1000));
+    serialMonit.printf("\r\n");
+    serialMonit.printf("  A enregistrer = %s\n", to_store);
+    serialMonit.printf("\r\n");
+    serialMonit.printf("  V_USB = %f", Vusb);
+    serialMonit.printf("\r\n\r\n");
+    fflush(stdout);
+}
+
 void pressed() {
- 
   GO = GO + 1;
   if (GO > 1) NVIC_SystemReset(); 
 }
@@ -219,45 +203,44 @@
         if (Servo_Poumon.Pos_OK() == true) break;
         //if (Servo_Poumon.Pos_OK() == true && Servo_Fuite.Pos_OK() == true) break;
     }
-    printf("-------------- Appareil en mode SECU ---------------\r\n");
+    DEBUG_M("-------------- Appareil en mode SECU ---------------\r\n");
     
     wait_ms(100);
-    Consigne_poumon = 90;
-    
-    while(1) {
-        wait_ms(100);
-        if (Servo_Poumon.Pos_OK() == true) break;
-        //if (Servo_Poumon.Pos_OK() == true && Servo_Fuite.Pos_OK() == true) break;
-    }
-    printf("-------------- Appareil en mode SECU ---------------\r\n");
-    
     
     EN_MODE_SECU = true;
     wait_ms(100);
     int Pos = Servo_Poumon.getPulses();
     UTILS::Store_A_Val((float)Pos, "Servo_Poumon");
-    printf("  position volet poumon sauvegardée = %d pulse(s)\r\n", Pos);
+    DEBUG_M("  position volet poumon sauvegardée = %d pulse(s)\r\n", Pos);
     //Pos = Servo_Fuite.getPulses();
     //UTILS::Store_A_Val((float)Pos, "Servo_Fuite");
-    //printf("  position volet fuite sauvegardée = %d pulse(s)\r\n", Pos);
-    UTILS::UnMount_SD();
+    //DEBUG_M("  position volet fuite sauvegardée = %d pulse(s)\r\n", Pos);
+    UTILS::UnMount_Flash();
     Servo_Poumon.Sleep();
 }
 
 //Sequence d'arrêt
 void Stop_Sequence()
-{
+{   
     Mode_SECU();  
-    printf("----------------ARRET DE L'APPAREIL--------------------\r\n");
-    deepsleep();
+    DEBUG_M("----------------ARRET DE L'APPAREIL--------------------\r\n");
+    
+    DEBUG_M("  Deep sleep autorisé : %i\r\n", sleep_manager_can_deep_sleep());
+    wait(1.0);
+    sleep_manager_sleep_auto();
 }
 
 //Fonction test de valeur d'entrée convertie en Hight / Low
-float Power_Test(AnalogIn& pin)
+int Power_Test(DigitalIn& pin)
 {
-    float Val = pin.read();
-    if(Val < 0.2) Stop_Sequence();
-    return Val;
+    pin.mode(PullDown);
+    
+    if(!pin){
+         Stop_Sequence();
+         return 0;
+    }else{
+         return 1;
+    }          
 }
 
 //Contrôle du status de l'appareil / des constantes
@@ -322,6 +305,7 @@
         
         //Servo_Fuite.Go_To_Prop(Consigne_fuite);
         //Servo_Fuite.Go_To_PID(Consigne_fuite);
+        //Servo_Fuite.Go_To(Consigne_fuite, Volets_Speed, Volet_DeadBand );
     }
 }
 
@@ -335,47 +319,21 @@
     }
 }
 
-void Affichage_moniteur()
-{
-
-    printf("\r\n");
-    printf("  CO2             = %d ppm\r\n"  , co2);
-    printf("  PPO2            = %d mb\r\n", ppO2);
-    printf("  OTU             = %d \r\n", OTU);
-    printf("  Pression        = %f msw\r\n", pression);
-    printf("  Temp MS5837     = %f C\r\n", Temp1);
-    printf("  Temp HTU21D     = %f C\n\r", Temp2);
-    printf("  Humidity        = %d %%\n\r", Humid);
-    printf("\n\r");
-    printf("  Cell O2 n 1     = %d\r\n"  , CellO2_1);
-    printf("  Cell O2 n 2     = %d\r\n"  , CellO2_2);
-    printf("\r\n");
-    printf("\n");
-    printf("  Volet Poumon    = %f\r\n"  , volet_poumon_Position);
-    printf("  Volet Fuite     = %f\r\n"  , volet_fuite_Position);
-    printf("\r\n");
-    printf("Temps d execution de la boucle = %f seconde(s)\n", (RATE + RATE_TRUE / 1000));
-    printf("\r\n");
-    printf("A enregistrer = %s\n", to_store);
-    printf("\r\n");
-    printf("V_USB = %f", Vusb);
-    printf("\r\n");
-    
-}
-
 //Callback de l'intérruption des envois de commandes depuis le terminal
 void callbackParam()
-{
-    while(serialMonit.readable()) {
-        if (indexParam  == sizeParam) //éviter la saturation du buffer
-            serialMonit.getc();
-        else
-            param [indexParam++] = serialMonit.getc();//chargement du buffer dans le message
-        if ((indexParam == sizeParam) || (param[indexParam -1] == '\n')) {//le message est complet ou nouvelle ligne ou autre si on veut...
-            param[indexParam] = 0;
-            newParamFlag  = true;
-        }
-    }
+{    
+    while(serialMonit.readable())
+     {
+       if ((indexParam  == sizeParam) || newParamFlag  == true) //éviter la saturation du buffer
+            char char_flush = serialMonit.getc();
+        else 
+            param [indexParam ++] = serialMonit.getc();//chargement du buffer dans le message
+       
+       if ((indexParam == sizeParam) || (param[indexParam - 1] == '\n')) {//le message est complet ou nouvelle ligne ou autre si on veut...
+       param[indexParam] = 0;
+       newParamFlag  = true;
+      }
+   }  
 }
 
 //Callback de l'intérruption des envois de commandes depuis Android
@@ -395,34 +353,66 @@
 
 void Decoding_Message(char message [])
 {
-    char *commande = 0;
-    float valeur = 0;
 
-    sscanf(message,"%s %f",&commande , &valeur);
+    char com[sizeParam] = "";
+    float val = 0.0;
+    
+    sscanf(message,"%s %f",&com , &val);
+        
+    DEBUG_M("\r\n  Commande = %s       Valeur = %f \r\n\r\n", com, val);
 
-    if ((char)commande == 'S') {
+    if (0 == strcmp(com, "secu-")) {
         Mode_SECU();
-    }else if ((char)commande == 'D') {
-        UTILS::Dir_SD();
-    }else if ((char)commande == 'U') {
+    }else if (0 == strcmp(com, "help")) {
+        FLAG_AFF = false;
+        UTILS::Help();    
+    }else if (0 == strcmp(com, "start")) {
+        FLAG_AFF = true;
+    }else if (0 == strcmp(com, "stop")) {
+        FLAG_AFF = false;
+        UTILS::Help();       
+    }else if (0 == strcmp(com, "clean")) {
+        //Enregistrement de la chaine
+        FLAG_REC = false;
+        UTILS::Clean_Flash();
+    }else if (0 == strcmp(com, "dir")) {
+        FLAG_REC = false;
+        UTILS::Dir_Flash();
+        FLAG_REC = true;
+    }else if (0 == strcmp(com, "get")) {
+        FLAG_REC = false;        
+        wait_ms(100);
         char filename[20];
-        sprintf(filename, "LOG_%d.txt", (int)valeur);
-        UTILS::Read_SD_File(filename);    
-    } else if ((char)commande == 'r') {
+        sprintf(filename, "LOG_%d.txt", (int)val);
+        UTILS::Read_Flash_File(filename);
+        wait_ms(100);
+        FLAG_REC = true;
+    }else if (0 == strcmp(com, "del")) {
+        FLAG_REC = false;
+        char filename[20];
+        sprintf(filename, "LOG_%d.txt", (int)val);
+        UTILS::Delete_Flash_File(filename);
+        UTILS::Dir_Flash();
+        FLAG_REC = true;           
+    } else if (0 == strcmp(com, "calib_p")) {
         Consigne_poumon = 0;
         volet_poumon_Position = 0;
         Servo_Poumon.reset();
-    } else if ((char)commande == 'Q') {
+    } else if (0 == strcmp(com, "calib_f")) {
+        Consigne_fuite = 0;
+        volet_fuite_Position = 0;
+        //Servo_Fuite.reset();    
+    } else if (0 == strcmp(com, "sleep")) {
         Stop_Sequence();
-    } else if ((char)commande == 'T') {
-        set_time(valeur);
-    } else if ((char)commande == 'I') {
-        Consigne_poumon = (float)valeur;
-        printf("  Servo Poumon    = %f\r\n", Consigne_poumon);
-    } else if ((char)commande == 'O') {
-        Consigne_fuite = (float)valeur;
-        printf("  Servo Fuite     =  %f\r\n", Consigne_fuite);
-    } else if ((char)commande == 'R') {
+    } else if (0 == strcmp(com, "time")) {//Depuis terminal MAC taper : " date +%s "
+        set_time(val);
+    } else if (0 == strcmp(com, "c_pou")) {
+        Consigne_poumon = (float)val;
+        DEBUG_M("  Servo Poumon    = %f\r\n", Consigne_poumon);
+    } else if (0 == strcmp(com, "c_fui")) {
+        Consigne_fuite = (float)val;
+        DEBUG_M("  Servo Fuite     =  %f\r\n", Consigne_fuite);
+    } else if (0 == strcmp(com, "reset")) {
         NVIC_SystemReset();
         /////////////////////////////////////////
         //Pour rajouter une commande
@@ -433,7 +423,7 @@
     } else {
         sensors.cozirSend(message);
     }
-
+    
     strcpy(param," ");
     indexParam = 0;
     newParamFlag = false;
@@ -450,10 +440,10 @@
         set_time(valeur);
     } else if ((char)commande == 'I') {
         Consigne_poumon = (float)valeur;
-        printf("  Servo Poumon    = %f\r\n", Consigne_poumon);
+        DEBUG_M("  Servo Poumon    = %f\r\n", Consigne_poumon);
     } else if ((char)commande == 'O') {
         Consigne_fuite = (float)valeur;
-        printf("  Servo Fuite     =  %f\r\n", Consigne_fuite);
+        DEBUG_M("  Servo Fuite     =  %f\r\n", Consigne_fuite);
         /////////////////////////////////////////
         //Pour rajouter une commande
         //} else if ((char)commande == 'X') {
@@ -468,21 +458,21 @@
         Kc = (float)valeur;
         control_Servo.reset();
         control_Servo.setTunings(Kc, Ti, Td);
-        printf("  UPDATE PID -->  Kc = %f   Ti = %f   Td = %f\r\n\n", Kc, Ti, Td);
+        DEBUG_M"  UPDATE PID -->  Kc = %f   Ti = %f   Td = %f\r\n\n", Kc, Ti, Td);
     } else if ((char)commande == 'i') {
         Ti = (float)valeur;
         control_Servo.reset();
         control_Servo.setTunings(Kc, Ti, Td);
-        printf("  UPDATE PID -->  Kc = %f   Ti = %f   Td = %f\r\n\n", Kc, Ti, Td);
+        DEBUG_M("  UPDATE PID -->  Kc = %f   Ti = %f   Td = %f\r\n\n", Kc, Ti, Td);
     } else if ((char)commande == 'd') {
         Td = (float)valeur;
         control_Servo.reset();
         control_Servo.setTunings(Kc, Ti, Td);
-        printf("  UPDATE PID -->  Kc = %f   Ti = %f   Td = %f\r\n\n", Kc, Ti, Td);
+        DEBUG_M("  UPDATE PID -->  Kc = %f   Ti = %f   Td = %f\r\n\n", Kc, Ti, Td);
     } else if ((char)commande == 'c') {
         consigne = valeur;
         control_Servo.setSetPoint(consigne);
-        printf("  UPDATE CONSIGNE PID -->  Consigne = %d\r\n\n", consigne);
+        DEBUG_M("  UPDATE CONSIGNE PID -->  Consigne = %d\r\n\n", consigne);
     }
 #endif
 
@@ -498,25 +488,26 @@
     char Time[40];
     strftime(Time, 40, "%a_%d_%m_%Y_%H%M", localtime(&seconds));
     sprintf(Log_File_Name, "%s_LOG.txt", Time);
-    printf("Nouveau fichier LOG = %s \r\n", Log_File_Name);
-    
+    DEBUG_M("Nouveau fichier LOG = %s \r\n", Log_File_Name);   
     }
     
 void Create_File_Name_Index()
 {
     //Du nom du fichier par Index
     sprintf(Log_File_Name, "LOG_%d.txt", UTILS::File_Index());
-    printf("  Nouveau fichier LOG = %s \r\n", Log_File_Name);    
+    DEBUG_M("  Nouveau fichier LOG = %s \r\n", Log_File_Name);    
     }
     
 int main()
 {
+    
    button.fall(&pressed);
+   
    int count = 0;
     
    while (1) { 
    
-   if (count == 0) serialMonit.printf("\r\nAppuyez sur le User Button pour commencer...\r\n");
+   if (count == 0) serialMonit.printf("\r\nAppuyez sur le User Button pour commencer...\r\n\r\n");
    
    count = 1;
    
@@ -529,13 +520,13 @@
     android.attach(&callbackAndroid, Serial::RxIrq);
 
     //Ci-dessous commande pour formater une nouvelle carte
-    UTILS::Format_SD();
+    //UTILS::Format_Flash();
 
-    //Montage carte SD 
-    UTILS::Mount_SD();
+    //Montage Flash 
+    UTILS::Mount_Flash();
     
-    //Liste des fichiers sur la carte sd
-    UTILS::Dir_SD();
+    //Liste des fichiers sur la Flash
+    UTILS::Dir_Flash();
     
     bool calib_O2 = false;
     bool calib_CO2 = false;
@@ -565,13 +556,13 @@
     wait(1);
     
     Servo_Poumon.Init("Servo_Poumon");
-    //Servo_Fuite.Init();
+    //Servo_Fuite.Init("Servo_Fuite");
      
     //Création du nouveau fichier LOG par index / par date.
     Create_File_Name_Index();
     //Create_File_Name_Date()
     
-    serialMonit.printf("  Demarrage des threads...\r\n\r\n");
+    DEBUG_M("  Demarrage des threads...\r\n\r\n");
 
     /*
 
@@ -617,20 +608,20 @@
     control_Servo.setSetPoint(consigne);
 #endif
     
-    serialMonit.printf("  Threads démmarés.....Entrez les comandes COZIR si besoin :\r\n");
-     
+    DEBUG_M("  Threads démmarés.....\r\n\r\n  Tapez help pour voir la liste des commandes disponibles.\r\n ");
+         
     while (true) {
         
         //Démarrage du Timer mesurant le temps d'éxecution du code
         REAL_RATE.start();
 
         if (newParamFlag) {
-            serialMonit.printf("Param = %s\r\n", param);
+            DEBUG_M("  From PC = %s\r\n", param);
             Decoding_Message(param);
         }
 
         if (newAndroidFlag) {
-            serialMonit.printf("Android = %s\r\n", Android);
+            DEBUG_M("  From Android = %s\r\n", Android);
             Decoding_Message_Android(Android);
         }
 
@@ -682,12 +673,9 @@
                );
 #endif
 
-        //Enregistrement de la chaine
-        UTILS::Write_SD_File(to_store, Log_File_Name);
-
         //Pour Android on ajoute < et > pour décoder l'arrivée du message
         if (NEED_ANDROID_OUTPUT == 1) {
-            //sprintf(to_android,"<%s>",to_store);
+            sprintf(to_android,"<%s>",to_store);
             ANDROID(to_android);
         }
 
@@ -695,7 +683,10 @@
         Calcul_OTU();
 
         //Vers le moniteur série
-        if (FLAG_AFF) Affichage_moniteur();
+        if (FLAG_AFF) Affichage();
+        
+        //Enregistrement de la chaine
+        if (FLAG_REC) UTILS::Write_Flash_File(to_store, Log_File_Name);
 
 
 #ifdef PID_MODE
@@ -720,7 +711,7 @@
 #ifdef PID_MODE
             control_Servo.setInterval(RATE);
 #endif
-            printf("Pour ralentir le code, Ref_Time doit être supérieur à %f seconde(s)\r\n\n", RATE);
+            DEBUG_M("Pour ralentir le code, Ref_Time doit être supérieur à %f seconde(s)\r\n\n", RATE);
         }
 
         wait_ms(RATE_TRUE);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.h	Tue Feb 20 16:52:22 2018 +0000
@@ -0,0 +1,100 @@
+/*
+
+void Help()
+{
+    serialMonit.printf("\r\n");
+    serialMonit.printf("  Commandes à entrer dans le moniteur :\r\n\r\n"  , co2);
+    serialMonit.printf("  h             = help, liste des commandes\r\n");
+    serialMonit.printf("  s             = start/stop, démmarage / arrêt des sortie moniteur\r\n");
+    serialMonit.printf("  c             = clean, nettoyage flash, suppression des fichiers LOG\r\n");
+    serialMonit.printf("  D             = Dir, liste des fichiers de la flash\r\n");
+    serialMonit.printf("  d X           = del X, effacer le fichier LOG_X\n\r");
+    serialMonit.printf("  l X           = load X, charger le contenu du fichier LOG_X\n\r");
+    serialMonit.printf("  t X           = time X, met la RTC à l'heure, X en UNIX TIME\n\r");
+    serialMonit.printf("  i X           = in, changement consigne volet poumon à X\n\r");
+    serialMonit.printf("  o X           = out, changement consigne volet fuite à X\n\r");
+    serialMonit.printf("  X             = mise à 0 du volet poumon\n\r");
+    serialMonit.printf("  Y             = mise à 0 du volet fuite\n\r");
+    serialMonit.printf("  Q             = Quit, mise en veille\n\r");
+    serialMonit.printf("  r             = reset de la carte\n\r\n\r");
+    serialMonit.printf("  Les commandes pour le Mini-r sont à entrer conformément à la doc.\n\r");
+    serialMonit.printf("\r\n\r\n");
+    fflush(stdout);
+}
+
+
+void Decoding_Message(char message [])
+{
+    char *commande = 0;
+    float valeur = 0;
+
+    sscanf(message,"%s %f",&commande , &valeur);
+
+    if ((char)commande == 'c') {
+        FLAG_REC = false;
+        UTILS::Clean_Flash();
+    }else if ((char)commande == 'D') {
+        FLAG_REC = false;
+        UTILS::Dir_Flash();
+        FLAG_REC = true;
+    }else if ((char)commande == 's') {
+        if (FLAG_AFF)  
+        FLAG_AFF = false;
+        else 
+        FLAG_AFF = true;    
+    }else if ((char)commande == 'h') {
+        FLAG_AFF = false;
+        Help();
+    }else if ((char)commande == 'c') {
+        FLAG_REC = false;
+        UTILS::Clean_Flash();       
+    }else if ((char)commande == 'l') {
+        FLAG_REC = false;
+        char filename[20];
+        sprintf(filename, "LOG_%d.txt", (int)valeur);
+        wait_ms(100);
+        UTILS::Read_Flash_File(filename);
+        wait_ms(100);
+        FLAG_REC = true;
+    }else if ((char)commande == 'd') {
+        FLAG_REC = false;
+        char filename[20];
+        sprintf(filename, "LOG_%d.txt", (int)valeur);
+        UTILS::Delete_Flash_File(filename);
+        FLAG_REC = true;           
+    } else if ((char)commande == 'X') {
+        Consigne_poumon = 0;
+        volet_poumon_Position = 0;
+        Servo_Poumon.reset();
+    } else if ((char)commande == 'Y') {
+        Consigne_fuite = 0;
+        volet_fuite_Position = 0;
+        //Servo_Fuite.reset();
+    } else if ((char)commande == 'Q') {
+        Stop_Sequence();
+    } else if ((char)commande == 't') {
+        set_time(valeur);
+    } else if ((char)commande == 'i') {
+        Consigne_poumon = (float)valeur;
+        DEBUG_M("  Servo Poumon    = %f\r\n", Consigne_poumon);
+    } else if ((char)commande == 'o') {
+        Consigne_fuite = (float)valeur;
+        DEBUG_M("  Servo Fuite     =  %f\r\n", Consigne_fuite);
+    } 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);
+    }
+    
+    strcpy(param," ");
+    indexParam = 0;
+    newParamFlag = false;
+}
+
+*/
\ No newline at end of file
--- a/mbed-os.lib	Tue Feb 13 16:57:47 2018 +0000
+++ b/mbed-os.lib	Tue Feb 20 16:52:22 2018 +0000
@@ -1,1 +1,1 @@
-https://github.com/ARMmbed/mbed-os/#4c256f04596179699c4f14b6863b07cc024ca9be
+https://github.com/ARMmbed/mbed-os/#569159b784f70feaa32ce226aaca896fb83452f7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sd-driver-hs.lib	Tue Feb 20 16:52:22 2018 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/POTLESS_2/code/sd-driver-hs/#f93f1a0417ba
--- a/sd-driver.lib	Tue Feb 13 16:57:47 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-https://mbed.org/users/coverxit/code/sd-driver/#0df98d0fd2a5