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:
- 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);