mbed-os github

Dependencies:   ADS1015 Faulhaber HTU21D_mod MS5837_potless Sensor_Head_RevB_3 USBDevice_dfu Utilsdfu beep

Fork of ARNSRS_testDFU by POTLESS

Revision:
42:3591ec9903b4
Parent:
41:51ba69648f9d
Child:
43:5ae8baf28e32
diff -r 51ba69648f9d -r 3591ec9903b4 main.cpp
--- a/main.cpp	Fri Mar 30 10:29:10 2018 +0000
+++ b/main.cpp	Mon Apr 09 06:52:00 2018 +0000
@@ -45,7 +45,7 @@
 #endif
 
 #if DEBUG_MODE
-#define DEBUG(...) { serialMonit.printf(__VA_ARGS__); fflush(stdout);}
+#define DEBUG(...) { printf(__VA_ARGS__); fflush(stdout);}
 #else
 #define DEBUG(...)
 #endif
@@ -56,16 +56,16 @@
 //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);
 
 //Moniteur série, Serial 2
-Serial serialMonit(USBTX,USBRX,115200);
+Serial serialMonit(PC_10,PC_11,115200);
 
 //COM Série vers Android, Serial 3
-Serial android(PC_10,PC_11,115200);
+Serial android(PA_2, PA_3,115200);
 
 //Init de la lib ARNSRS;
 SENSOR_HEAD_REV_B sensors;
 
 //pour Param Venant du PV
-const int sizeParam = 30;
+const int sizeParam = 50;
 char  param[sizeParam];
 volatile int indexParam = 0;
 bool newParamFlag = false;
@@ -78,7 +78,10 @@
 char to_android[100];
 
 //Flag pour interrompre l'affichage si on veut...
-bool FLAG_AFF = true;
+bool FLAG_FIRST_LOOP = true;
+
+//Flag pour interrompre l'affichage si on veut...
+bool FLAG_AFF = false;
 
 //Flag pour envoyer à l'app windev...
 bool FLAG_WINDEV = false;
@@ -116,6 +119,8 @@
 char to_store[50];
 time_t seconds;
 char Log_File_Name[] = "                           ";
+int count = 0;
+int Max_Log_Size = 1800;//1 heure, 1800 lignes donc à multiplier par la fréquence d'enregistrement, Ref_Time, pour voir combien de temps représente un Log...
 
 //Contrôle des servos
 float Consigne_poumon = 0;
@@ -162,8 +167,8 @@
 
 void Affichage()
 {
-    NVIC_DisableIRQ(USART2_IRQn);
-    serialMonit.printf("\r\n");
+    NVIC_DisableIRQ(USART3_IRQn);
+    //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", (int)OTU);
@@ -171,22 +176,22 @@
     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("\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("\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");
-    if (FLAG_REC) serialMonit.printf("  Chaine enregistrée = %s\n", to_store);
+    //serialMonit.printf("\r\n");
+    serialMonit.printf("  Temps d execution de la boucle = %f seconde(s)\r\n", (RATE + RATE_TRUE / 1000));
+    //serialMonit.printf("\r\n");
+    if (FLAG_REC) serialMonit.printf("  Chaine enregistrée = %s\r\n", to_store);
     else serialMonit.printf("  Pas d'enregistrement en cours.");
-    serialMonit.printf("\r\n");
-    serialMonit.printf("  V_USB = %f", Vusb);
-    serialMonit.printf("\r\n\r\n");
+    //serialMonit.printf("\r\n");
+    serialMonit.printf("  V_USB = %f\r\n", Vusb);
+    //serialMonit.printf("\r\n\r\n");
     fflush(stdout);
-    NVIC_EnableIRQ(USART2_IRQn);
+    NVIC_EnableIRQ(USART3_IRQn);
 }
 
 void pressed()
@@ -230,7 +235,7 @@
     EN_MODE_SECU = true;
     wait_ms(100);
     int Pos = Servo_Poumon.getPulses();
-    UTILS::Store_A_Val((float)Pos, "Servo_Poumon");
+    UTILS::Store_A_Val((float)Pos, "Servo_Poumon.sys");
     DEBUG("  position volet poumon sauvegardée = %d pulse(s)\r\n", Pos);
     //Pos = Servo_Fuite.getPulses();
     //UTILS::Store_A_Val((float)Pos, "Servo_Fuite");
@@ -401,17 +406,17 @@
 
     while(serialMonit.readable()) {
         if ((indexParam  == sizeParam) || newParamFlag  == true) { //éviter la saturation du buffer
-            NVIC_DisableIRQ(USART2_IRQn);
+            NVIC_DisableIRQ(USART3_IRQn);
             char char_flush = serialMonit.getc();
-            NVIC_EnableIRQ(USART2_IRQn);
+            NVIC_EnableIRQ(USART3_IRQn);
         } else {
-            NVIC_DisableIRQ(USART2_IRQn);
+            NVIC_DisableIRQ(USART3_IRQn);
             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;
             }
-            NVIC_EnableIRQ(USART2_IRQn);
+            NVIC_EnableIRQ(USART3_IRQn);
         }
     }
 }
@@ -434,22 +439,27 @@
 void Decoding_Message(char message [])
 {
 
-    char com[sizeParam] = "";
-    char numb[] = "";
+    char com[20] = "";
+    char numb[30] = "";
 
     sscanf(message,"%s %s",&com , &numb);
 
     DEEP_DEBUG("\r\n  Commande = %s       Valeur = %s \r\n\r\n", com, numb);
+    //serialMonit.printf("\r\n  Commande = %s       Valeur = %s \r\n\r\n", com, numb);
 
     if (0 == strcmp(com, "secu")) {
         Mode_SECU();
+    } else if (0 == strcmp(com, "PING")) {
+        NVIC_DisableIRQ(USART3_IRQn);
+        serialMonit.printf("$");
+        NVIC_EnableIRQ(USART3_IRQn);    
     } else if (0 == strcmp(com, "ARNSRS_ID")) {
         UTILS::Store_A_Val(atoi(numb), "ARNSRS_ID");
     } else if (0 == strcmp(com, "monit")) {        
             FLAG_AFF = false;
             FLAG_WINDEV = true;
     } else if (0 == strcmp(com, "debug")) {        
-            FLAG_AFF = true;
+            FLAG_AFF = false;
             FLAG_WINDEV = false;           
     } else if (0 == strcmp(com, "Head_ID")) {
         //On l'enregistre dans l'eeprom
@@ -466,40 +476,37 @@
     } else if (0 == strcmp(com, "calib_O2")) {
         FLAG_O2 = false;
         wait_ms(100);
-        sensors.Calibrate_O2(atoi(numb));
+        float Val =  sensors.Calibrate_O2(atoi(numb));
+        serialMonit.printf("  Calibration O2 dans l'air = %f\r\n", Val);  
         wait_ms(100);
         FLAG_O2 = true;
     } else if (0 == strcmp(com, "calib_CO2_A")) {
-        sensors.Calibrate_CO2("G\r\n");   
+        int Val = sensors.Calibrate_CO2(); 
+        serialMonit.printf("  Calibration CO2 dans l'air = %d\r\n", Val);  
     } else if (0 == strcmp(com, "flash_i")) {
-        FLAG_REC = false;
-        UTILS::Flash_Infos();
-        FLAG_REC = true;
+        UTILS::Flash_Infos(&serialMonit);
     } else if (0 == strcmp(com, "flash_u")) {
         FLAG_REC = false;
         UTILS::UnMount_Flash();
     } else if (0 == strcmp(com, "flash_m")) {
         UTILS::Mount_Flash();
     } else if (0 == strcmp(com, "check_F")) {
-        FLAG_REC = false;
-        serialMonit.printf("  ARNSRS_ID.txt   = %d\r\n", (int)UTILS::Read_A_Val("ARNSRS_ID"));
-        //serialMonit.printf("  Calibration_O2.txt = %f\r\n", UTILS::Read_A_Val("Calibration_O2"));
-        serialMonit.printf("  Servo_Poumon.txt   = %d\r\n", (int)UTILS::Read_A_Val("Servo_Poumon"));
-        //serialMonit.printf("Servo_Fuite.txt    = %d\r\n", (int)UTILS::Read_A_Val("Servo_Fuite");
-        FLAG_REC = true;
+        serialMonit.printf("  ARNSRS_ID.sys   = %d\r\n", (int)UTILS::Read_A_Val("ARNSRS_ID.sys"));
+        serialMonit.printf("  Servo_Poumon.sys   = %d\r\n", (int)UTILS::Read_A_Val("Servo_Poumon.sys"));
+        //serialMonit.printf("Servo_Fuite.sys    = %d\r\n", (int)UTILS::Read_A_Val("Servo_Fuite");
     } else if (0 == strcmp(com, "check_E")) {
-        sensors.Sensor_head_check();
+        sensors.Sensor_head_check(&serialMonit);
     } else if (0 == strcmp(com, "rec")) {
         if (FLAG_REC) {
             FLAG_REC = false;
-            serialMonit.printf("Arrêt du Data Logging.");
+            serialMonit.printf("  Arrêt du Data Logging.\r\n");
         } else {
             FLAG_REC = true;
-            serialMonit.printf("Démarrage Data Logging dans %s", Log_File_Name);
+            serialMonit.printf("  Démarrage Data Logging dans %s\r\n", Log_File_Name);
         }
     } else if (0 == strcmp(com, "help")) {
         FLAG_AFF = false;
-        UTILS::Help();
+        UTILS::Help(&serialMonit);
     } else if (0 == strcmp(com, "start")) {
         FLAG_AFF = true;
     } else if (0 == strcmp(com, "stop")) {
@@ -507,32 +514,29 @@
         //UTILS::Help();
     } else if (0 == strcmp(com, "flash_c")) {
         FLAG_REC = false;
+        //serialMonit.printf("$");
         UTILS::Clean_Flash();
-    } else if (0 == strcmp(com, "dir")) {
-        FLAG_REC = false;
-        UTILS::Dir_Flash();
-        FLAG_REC = true;
-    } else if (0 == strcmp(com, "get")) {
+    } else if (0 == strcmp(com, "flash_f")) {
         FLAG_REC = false;
+        //serialMonit.printf("$");
+        UTILS::Clean_Flash_All();    
+    } else if (0 == strcmp(com, "dir")) {
+        UTILS::Dir_Flash(&serialMonit);
+    } else if (0 == strcmp(com, "get")) {
+        int mark = 0;        
         wait_ms(100);
-        char filename[20];
-        sprintf(filename, "LOG_%d.txt", atoi(numb));
-        UTILS::Read_Flash_File(filename);
-        wait_ms(100);
-        FLAG_REC = true;
+        char filename[20];      
+        UTILS::Read_Flash_File(&serialMonit, numb);        
+        wait_ms(100);        
     } else if (0 == strcmp(com, "del")) {
         FLAG_REC = false;
         char filename[20];
-        sprintf(filename, "LOG_%d.txt", atoi(numb));
-        UTILS::Delete_Flash_File(filename);
-        UTILS::Dir_Flash();
+        UTILS::Delete_Flash_File(numb);
+        //UTILS::Dir_Flash(&serialMonit);
         FLAG_REC = true;
     } else if (0 == strcmp(com, "file_s")) {
-        FLAG_REC = false;
         char filename[20];
-        sprintf(filename, "LOG_%d.txt", atoi(numb));
-        UTILS::Get_File_Size(filename);
-        FLAG_REC = true;
+        UTILS::Get_File_Size(&serialMonit, numb);
     } else if (0 == strcmp(com, "calib_p")) {
         Consigne_poumon = 0;
         volet_poumon_Position = 0;
@@ -545,6 +549,7 @@
         Stop_Sequence();
     } else if (0 == strcmp(com, "time")) {//Depuis terminal MAC taper : " date +%s "
         set_time(atoi(numb));
+        serialMonit.printf("  La RTC a été mise à l'heure.\r\n");
     } else if (0 == strcmp(com, "c_pou")) {
         Consigne_poumon += atof(numb);
         DEBUG("  Servo Poumon    = %f\r\n", Consigne_poumon);
@@ -621,14 +626,14 @@
     seconds = time(NULL);
     char Time[40];
     strftime(Time, 40, "%a_%d_%m_%Y_%H%M", localtime(&seconds));
-    sprintf(Log_File_Name, "%s_LOG.txt", Time);
-    DEBUG("Nouveau fichier LOG = %s \r\n", Log_File_Name);
+    sprintf(Log_File_Name, "%s_LOG.csv", Time);
+    DEBUG("  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());
+    sprintf(Log_File_Name, "LOG_%d.csv", UTILS::File_Index());
     DEBUG("  Nouveau fichier LOG = %s \r\n", Log_File_Name);
 }
 
@@ -648,9 +653,10 @@
     int count = 0;
 
     while (1) {
-
-        if (count == 0) serialMonit.printf("\r\n  Appuyez sur le User Button pour commencer...\r\n\r\n");
-
+        
+        if (count == 0) {
+            serialMonit.printf("\r\n  Appuyez sur le User Button pour commencer...\r\n\r\n");
+            }
         count = 1;
 
         if (GO == 1) {
@@ -668,21 +674,24 @@
             UTILS::Mount_Flash();
 
             //Liste des fichiers sur la Flash
-            UTILS::Dir_Flash();
+            //UTILS::Dir_Flash(&serialMonit);
 
-            //Vérification RTC, si on est le 01/01/70, c'est qu'il y a un problème
+            if (UTILS::File_Exist("ARNSRS_ID.sys") == false) {
+                UTILS::Store_A_Val(000, "ARNSRS_ID.sys");
+                DEBUG("ARNSRS ID forcée à 000\r\n");
+            }
+    
+            serialMonit.printf("\r\n\r\n  Démarrage de l'appareil, veuillez patienter...\r\n\r\n");
+
+            //Vérification RTC, si on est le 01/01/70, c'est qu'il y a un problème...
             seconds = time(NULL);
             char YEAR[10];
             strftime(YEAR, 10, "%D", localtime(&seconds));
             if (0 == strcmp(YEAR, "01/01/70")) serialMonit.printf("  Vous devez régler la RTC...\r\n");
-
-            if (UTILS::File_Exist("ARNSRS_ID") == false) {
-                UTILS::Store_A_Val(000, "ARNSRS_ID");
-                DEBUG("ARNSRS ID forcée à 000\r\n");
-            }
-
-            bool calib_O2 = true;
-            bool calib_CO2 = true;
+            
+            
+            bool calib_O2 = false;
+            bool calib_CO2 = false;
 
             /*
             Par défaut les valeur en cas de calibration sur true sont les suivant
@@ -708,16 +717,16 @@
             wait(1);
 
             //Création du nouveau fichier LOG par index / par date.
-            Create_File_Name_Index();
-            //Create_File_Name_Date()
+            //Create_File_Name_Index();
+            Create_File_Name_Date();
 
             //Création et écriture du header du fichier LOG
             sensors.Create_Header(Log_File_Name);
 
-            Servo_Poumon.Init("Servo_Poumon");
+            Servo_Poumon.Init("Servo_Poumon.sys");
             //Servo_Fuite.Init("Servo_Fuite");
 
-            DEBUG("  Demarrage des threads...\r\n\r\n");
+            serialMonit.printf("  Demarrage des threads...\r\n\r\n");
 
             /*
 
@@ -732,6 +741,7 @@
                   osPriorityRealtime      = +3,          ///< priority: realtime (highest)
                   osPriorityError         =  0x84        ///< system cannot determine priority or thread has illegal priority
             */
+            
             wait(1);
 
 
@@ -739,7 +749,7 @@
 
             thread_Volets.start(callback(GO_TO_thread));
 
-            DEBUG("  Volets thread démarré\r\n\r\n");
+            serialMonit.printf("  Volets thread démarré\r\n\r\n");
 
             wait(1);
 
@@ -747,7 +757,7 @@
 
             thread_Secu.start(callback(SECU_thread));
 
-            DEBUG("  Secu thread démarré\r\n\r\n");
+            serialMonit.printf("  Secu thread démarré\r\n\r\n");
 
             wait(1);
 
@@ -755,7 +765,7 @@
 
             thread_Head.start(callback(SENSORS_thread));
 
-            DEBUG("  Info thread démarré\r\n\r\n");
+            serialMonit.printf("  Info thread démarré\r\n\r\n");
 
             wait(1);
 
@@ -772,20 +782,20 @@
             control_Servo.setSetPoint(consigne);
 #endif
 
-            DEBUG("  Threads démarrés.....\r\n\r\n  Tapez help pour voir la liste des commandes disponibles.\r\n ");
-
+            serialMonit.printf("  Threads démarrés.....\r\n\r\n  Cliquez sur le bouton help pour voir la liste des \r\n  commandes administrateur disponibles.\r\n$");
+            
             while (true) {
-
+                    
                 //Démarrage du Timer mesurant le temps d'éxecution du code
                 REAL_RATE.start();
 
                 if (newParamFlag) {
-                    DEBUG("  From PC = %s\r\n", param);
+                    DEEP_DEBUG("  From PC = %s\r\n", param);
                     Decoding_Message(param);
                 }
 
                 if (newAndroidFlag) {
-                    DEBUG("  From Android = %s\r\n", Android);
+                    DEEP_DEBUG("  From Android = %s\r\n", Android);
                     Decoding_Message_Android(Android);
                 }
 
@@ -817,7 +827,7 @@
 #endif
 #ifndef PID_MODE
                 //Fabrication de la chaine à enregistrer sans les variables du PID
-                sprintf(to_store,"%s:%d:%d:%.2f:%.2f:%.2f:%d:%d:%d:%.2f:%.2f:%d:%.3f:%.3f:%.3f:%d",
+                sprintf(to_store,"%s;%d;%d;%.2f;%.2f;%.2f;%d;%d;%d;%.2f;%.2f;%d;%.3f;%.3f;%.3f;%d",
                         Time_buf,
                         co2,
                         ppO2,
@@ -838,7 +848,7 @@
 #endif
                 char to_slave[50];
                 //Fabrication de la chaine pour l'IHM
-                sprintf(to_slave,"<%d:%d:%d:%.2f:%.2f:%.2f:%d:%d:%d:%.2f:%.2f>",
+                sprintf(to_slave,"<%d:%d:%d:%.2f:%.2f:%.2f:%d:%d:%d:%.2f:%.2f>\r\n",
                         co2,
                         ppO2,
                         (int)OTU,
@@ -859,21 +869,32 @@
 
                 //Pour windev la même chose que pour l'écran
                 if (FLAG_WINDEV) {
-                    NVIC_DisableIRQ(USART2_IRQn);
+                    NVIC_DisableIRQ(USART3_IRQn);
                     serialMonit.printf(to_slave);
-                    NVIC_EnableIRQ(USART2_IRQn);
+                    NVIC_EnableIRQ(USART3_IRQn);
                 }
 
                 //Calcul des OTU
                 Calcul_OTU();
 
                 //Vers le moniteur série
-                if (FLAG_AFF) Affichage();
-
+                if (FLAG_AFF) {
+                    NVIC_DisableIRQ(USART3_IRQn);
+                    Affichage();
+                    NVIC_EnableIRQ(USART3_IRQn);
+                }
+                
                 //Enregistrement de la chaine
-                if (FLAG_REC) UTILS::Write_Flash_File(to_store, Log_File_Name);
-
-
+                if (FLAG_REC) {
+                    UTILS::Write_Flash_File(to_store, Log_File_Name);
+                    count ++;
+                    if (count > Max_Log_Size) {
+                        Create_File_Name_Date();
+                        sensors.Create_Header(Log_File_Name);
+                        count = 0;
+                        }
+                }
+                
 #ifdef PID_MODE
                 //Update du PID
                 control_Servo.setProcessValue(ppO2);