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:
62:891379d80b1b
Parent:
60:e2922f9e309c
Child:
63:69f6d600807e
diff -r e2922f9e309c -r 891379d80b1b main.cpp
--- a/main.cpp	Sat Jun 30 01:18:40 2018 +0000
+++ b/main.cpp	Tue Jul 03 16:24:59 2018 +0000
@@ -37,11 +37,6 @@
 #define OUTPUT(...) { serialMonit.printf(__VA_ARGS__); fflush(stdout);}
 #define IHM(...) { NVIC_DisableIRQ(USART3_IRQn); display.printf(__VA_ARGS__); fflush(stdout);NVIC_EnableIRQ(USART3_IRQn);}
 
-//PinName pwm, PinName nSleep, PinName fwd, PinName rev, PinName channelA, PinName channelB, int pulsesPerRev, int Rapport, Encoding encoding = X2_ENCODING
-//Angle 0 -> tuyau fermé, Angle 90 -> tuyau ouvert
-Faulhaber Servo_Poumon(VOLET_POUMON_ADDR, PWM_SERVO_POUMON, nSleep_SERVO_POUMON, FWD_SERVO_POUMON, REV_SERVO_POUMON, Channel_A_SERVO_POUMON, Channel_B_SERVO_POUMON, 16, 1257, Faulhaber::X2_ENCODING);
-Faulhaber Servo_Fuite(VOLET_FUITE_ADDR, PWM_SERVO_FUITE, nSleep_SERVO_FUITE, FWD_SERVO_FUITE, REV_SERVO_FUITE, Channel_A_SERVO_FUITE, Channel_B_SERVO_FUITE, 16, 207, Faulhaber::X2_ENCODING);
-
 //Communication USB, OTG_FS
 USBSerial serialMonit(0x0483, 0x5740, 0x0001, false);
 //USBSerial serialMonit;//Pour pilotes windows Olivier
@@ -52,6 +47,11 @@
 //Communication avec l'IHM, Serial 3
 Serial display(PC_4, PC_5, 115200);
 
+//PinName pwm, PinName nSleep, PinName fwd, PinName rev, PinName channelA, PinName channelB, int pulsesPerRev, int Rapport, Encoding encoding = X2_ENCODING
+//Angle 0 -> tuyau fermé, Angle 90 -> tuyau ouvert
+Faulhaber Servo_Poumon(VOLET_POUMON_ADDR, PWM_SERVO_POUMON, nSleep_SERVO_POUMON, FWD_SERVO_POUMON, REV_SERVO_POUMON, Channel_A_SERVO_POUMON, Channel_B_SERVO_POUMON, 16, 1257, HOME_SERVO_POUMON, Faulhaber::X2_ENCODING);
+Faulhaber Servo_Fuite(VOLET_FUITE_ADDR, PWM_SERVO_FUITE, nSleep_SERVO_FUITE, FWD_SERVO_FUITE, REV_SERVO_FUITE, Channel_A_SERVO_FUITE, Channel_B_SERVO_FUITE, 16, 207, HOME_SERVO_FUITE, Faulhaber::X2_ENCODING);
+
 //Init de la lib ARNSRS;
 SENSOR_HEAD_REV_B sensors;
 
@@ -119,10 +119,12 @@
 //Contrôle des servos
 float Consigne_poumon = HOME_SERVO_POUMON;
 float volet_poumon_Position;
+
 float Consigne_fuite = HOME_SERVO_FUITE;
 float volet_fuite_Position;
+
 float Volets_Speed = 1;
-float Volet_DeadBand = 10;
+float Volet_DeadBand = 5;
 
 //Paramètre du PID
 float Kc = 40;
@@ -171,26 +173,11 @@
 //Pin du Buzzer
 Beep buzzer(PC_8);
 
-
-/*
-
-Pour mémoire, les réglage de priorité des thread
-
-      osPriorityIdle          = -3,          ///< priority: idle (lowest)
-      osPriorityLow           = -2,          ///< priority: low
-      osPriorityBelowNormal   = -1,          ///< priority: below normal
-      osPriorityNormal        =  0,          ///< priority: normal (default)
-      osPriorityAboveNormal   = +1,          ///< priority: above normal
-      osPriorityHigh          = +2,          ///< priority: high
-      osPriorityRealtime      = +3,          ///< priority: realtime (highest)
-      osPriorityError         =  0x84        ///< system cannot determine priority or thread has illegal priority
-*/
-
 //Déclaration des Threads
-Thread thread_Secu(osPriorityLow);
-Thread thread_Head(osPriorityLow);
-Thread thread_Volets_POUMON(osPriorityLow);
-Thread thread_Volets_FUITE(osPriorityLow);
+Thread thread_Secu;
+Thread thread_Head;
+Thread thread_Volets_POUMON;
+Thread thread_Volets_FUITE;
 
 void sleepDemande()
 {
@@ -207,11 +194,13 @@
     IHM("<0 0 ;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;%d>\r\n", Commande_IHM);
     FLAG_DISPLAY = false;
     Commande_IHM = 0;
+    
     // mise à zero UART IHM pour éviter son redémarrage intempestif (le tx suffirait)
     HAL_PWREx_EnableGPIOPullDown(PWR_GPIO_C, PWR_GPIO_BIT_4);
     HAL_PWREx_EnableGPIOPullDown(PWR_GPIO_C, PWR_GPIO_BIT_5);
     
     E5V = 0;
+    
     UTILS::EffacePage(2, 29, 1);
     UTILS::Write(DFU_ADDR, 0xBABEFACE);
     
@@ -231,13 +220,14 @@
     HAL_PWREx_EnterSHUTDOWNMode();
 }
 
-
 // gestion du cas où le sleep est demandé volontairement 
 // et où l'utilisateur coupe ensuite l'alimentation en débranchant ou interrupteur sur off
 // on refait un shutdown mais avec un wake up sur le branchement du cable + interrupteur sur ON
 void flagSleep(){
     
     if ((int) UTILS::Read(DFU_ADDR) == 0xBABEFACE ) {
+          DEBUG("  Re démarrage BABEFACE.\n");
+          /*    
                 Commande_IHM = 1;
                 IHM("<0 0 ;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;%d>\r\n", Commande_IHM);
                 FLAG_DISPLAY = false;
@@ -245,11 +235,17 @@
                 
             HAL_PWREx_EnableGPIOPullDown(PWR_GPIO_C, PWR_GPIO_BIT_4);
             HAL_PWREx_EnableGPIOPullDown(PWR_GPIO_C, PWR_GPIO_BIT_5);
+            
             buzzer.beep(1000,0.1);
             wait_ms(100);
             buzzer.beep(1000,0.1);
             wait(1);
+            */
+            
+        E5V = 0;
+            
         UTILS::EffacePage(2, 29, 1);
+        
         HAL_PWREx_EnablePullUpPullDownConfig() ;
         HAL_PWREx_EnableGPIOPullDown(PWR_GPIO_A, PWR_GPIO_BIT_0);
         HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1); // pour PA_0
@@ -275,8 +271,11 @@
     buzzer.beep(1000,0.3);
     wait_ms(500);
     buzzer.beep(1000,0.3);
+    
     wait(1);
     
+    E5V = 0;
+     
     //Arrêt des enregistrements
     FLAG_REC = false;
 
@@ -306,7 +305,7 @@
     //Mise en veille version cable arraché
     DEBUG("  Mise en veille...\r\n");
     //wait(1);
-        //Mise en veille
+    //Mise en veille
     HAL_PWREx_EnablePullUpPullDownConfig() ;
     HAL_PWREx_EnableGPIOPullDown(PWR_GPIO_A, PWR_GPIO_BIT_0);
     HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1); // pour PA_0
@@ -392,7 +391,8 @@
 {
 
     //Mise du PID en mode manuel (desactivation...)
-    control_Servo.setMode(MANUAL_MODE);
+    //control_Servo.setMode(MANUAL_MODE);
+    FLAG_PID = 0;
 
     Consigne_poumon = HOME_SERVO_POUMON;
     Consigne_fuite = HOME_SERVO_FUITE;
@@ -400,13 +400,12 @@
     Volets_Speed = 1;
     Volet_DeadBand = 10;
 
-
     while(1) {
         wait_ms(100);
         if (Servo_Poumon.Pos_OK() == true && Servo_Fuite.Pos_OK() == true) break;
     }
-
-
+    
+    
     OUTPUT("  Appareil en mode SECU\r\n");
 
     wait_ms(100);
@@ -415,17 +414,6 @@
 
     wait_ms(100);
 
-    /*
-    int Pos_P = Servo_Poumon.getPulses();
-    UTILS::Store_A_Val((float)Pos_P, "Servo_Poumon.sys");
-    DEBUG("  position volet poumon sauvegardée = %d pulse(s)\r\n", Pos_P);
-    OUTPUT("  Volet poumon en sécu\r\n");
-
-    int Pos_F = Servo_Fuite.getPulses();
-    UTILS::Store_A_Val((float)Pos_F, "Servo_Fuite.sys");
-    DEBUG("  position volet fuite sauvegardée = %d pulse(s)\r\n", Pos_F);
-    OUTPUT("  Volet fuite en sécu\r\n");
-    */
     UTILS::EffacePage(2, 31, 1);
     //Enregistrement position des servos en sécu pour plus de précision
     uint64_t Pos_P = Servo_Poumon.getPulses();
@@ -544,10 +532,11 @@
 {
     while (true) {
         //DEEP_DEBUG("  GO_TO_Thread_POUMON\r\n");
-
+       
         //Servo_Poumon.Go_To_Prop(Consigne_poumon);
-        //Servo_Poumon.Go_To_PID(Consigne_poumon, Volet_DeadBand);
+        //Servo_Poumon.Go_To_PID(Consigne_poumon, Volet_DeadBand);//Nécessite de déclarer un dernier terme true dans l'init du moteur
         Servo_Poumon.Go_To(Consigne_poumon, Volets_Speed, Volet_DeadBand);
+        
     }
 }
 
@@ -559,6 +548,7 @@
         //Servo_Fuite.Go_To_Prop(Consigne_fuite);
         //Servo_Fuite.Go_To_PID(Consigne_fuite, Volet_DeadBand);
         Servo_Fuite.Go_To(Consigne_fuite, Volets_Speed, Volet_DeadBand);
+       
     }
 }
 
@@ -788,11 +778,9 @@
         NVIC_SystemReset();
     } else if (0 == strcmp(com, "PID")) {
         if (FLAG_PID == 1) {
-            //control_Servo.setMode(MANUAL_MODE);
             OUTPUT("  PID OFF\r\n");
             FLAG_PID = 0;
         } else if (FLAG_PID == 0) {
-            //control_Servo.setMode(AUTO_MODE);
             OUTPUT("  PID ON\r\n");
             FLAG_PID = 1;
         }
@@ -853,12 +841,14 @@
 
 int main()
 {
+    flagSleep(); // on vérifie si la demande de sleep n'est pas active (permet de redémarrer sur un front haut)
     
     HAL_Init();
     __HAL_RCC_PWR_CLK_ENABLE();
     HAL_PWR_EnableBkUpAccess();
 
     UTILS::DFU();
+    
     flagSleep(); // on vérifie si la demande de sleep n'est pas active (permet de redémarrer sur un front haut)
     
     E5V = 1;
@@ -876,12 +866,14 @@
 
     //Montage Flash
     UTILS::Mount_Flash();
+    
     /*
         if (UTILS::File_Exist("ARNSRS_ID.sys") == false) {
             UTILS::Store_A_Val(000, "ARNSRS_ID.sys");
             DEBUG("ARNSRS ID forcée à 000\r\n");
         }
     */
+    
     //pour le premier lancement quand l'appareil n'a pas d'ID.
     //int ID = 0;
     //UTILS::Write(ADRESSE_ID, ID);
@@ -899,7 +891,7 @@
     bool calib_O2 = false;
     bool calib_CO2 = false;
 
-    //sensors.Sensors_INIT(calib_O2, calib_CO2);
+    sensors.Sensors_INIT(calib_O2, calib_CO2);
 
     wait(1);
 
@@ -919,28 +911,53 @@
     */
 
     DEBUG("  Demarrage des threads...\r\n\r\n");
-
-    wait(1);
-
-    thread_Secu.start(callback(SECU_thread));
-
-    DEBUG("  Contrôle des paramètres de sécu démarré\r\n\r\n");
-
+    
+        /*
+ 
+    Pour mémoire, les réglage de priorité des thread
+ 
+          osPriorityIdle          = -3,          ///< priority: idle (lowest)
+          osPriorityLow           = -2,          ///< priority: low
+          osPriorityBelowNormal   = -1,          ///< priority: below normal
+          osPriorityNormal        =  0,          ///< priority: normal (default)
+          osPriorityAboveNormal   = +1,          ///< priority: above normal
+          osPriorityHigh          = +2,          ///< priority: high
+          osPriorityRealtime      = +3,          ///< priority: realtime (highest)
+          osPriorityError         =  0x84        ///< system cannot determine priority or thread has illegal priority
+    */
+ 
+    thread_Volets_POUMON.set_priority(osPriorityHigh);
+ 
+    thread_Volets_POUMON.start(callback(GO_TO_thread_POUMON));
+ 
+    DEBUG("  Contrôle volet Poumon démarré\r\n\r\n");
+ 
     wait(1);
     
+    thread_Volets_FUITE.set_priority(osPriorityHigh);
+ 
+    thread_Volets_FUITE.start(callback(GO_TO_thread_FUITE));
+ 
+    DEBUG("  Contrôle volet Fuite démarré\r\n\r\n");
+ 
+    wait(1);
+ 
+    thread_Secu.set_priority(osPriorityNormal);
+ 
+    thread_Secu.start(callback(SECU_thread));
+ 
+    DEBUG("  Contrôle des paramètres de sécu démarré\r\n\r\n");
+ 
+    wait(1);
+ 
+    thread_Head.set_priority(osPriorityNormal);
+ 
     thread_Head.start(callback(SENSORS_thread));
-
+ 
     DEBUG("  Tête capteurs démarrée\r\n\r\n");
-
+ 
     wait(1);
 
-    thread_Volets_POUMON.start(callback(GO_TO_thread_POUMON));
-
-    wait(1);
-
-    thread_Volets_FUITE.start(callback(GO_TO_thread_FUITE));
-
-    DEBUG("  Contrôle des volets démarré\r\n\r\n");
 
     //Init PID
     //Entrée PPO2 entre 100 et 1000 mb