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:
7:ad15c386e960
Parent:
6:ebed9093d661
Child:
8:a750d531b381
--- a/main.cpp	Sun Jul 23 18:46:22 2017 +0000
+++ b/main.cpp	Wed Aug 02 06:01:03 2017 +0000
@@ -1,17 +1,12 @@
 #include "mbed.h"
 #include <string>
+#include "Sensor_head_revB.h"
 
-Serial serialCozir (PC_12,PD_2,9600);
-
+//Moniteur série
 Serial serialMonit (USBTX,USBRX,9600);
 
-//pour Cozir
-const int size = 8;
-char  reponse[size];
-string commande;
-int reponseInt;
-int indexCozir;
-bool newMessageFlag = false;
+//Init de la lib ARNSRS;
+SENSOR_HEAD_REV_B sensors;
 
 //pour Param Cozir
 const int sizeParam = 6;
@@ -19,27 +14,50 @@
 int indexParam;
 bool newParamFlag = false;
 
-void cozirSend(char* commande)
+//Variables de stockage des infos capteurs
+int co2 = 0;
+float pression = 0;
+float Temp = 0;
+int ppO2 = 0;
+int CellO2_1 = 0;
+int CellO2_2 = 0;
+
+//Mesure du tempsd'éxecution du loop
+Timer REAL_RATE;
+float RATE = 0;
+
+//Thread d'intérogation des capteurs
+Thread thread;
+
+void Sensors_thread()
 {
-    if (serialCozir.writeable()) {
-        serialCozir.puts(commande);
+    while (true) {
+
+        //CO2 sur Cozir
+        co2 = sensors.requestCO2();
+        //P / T sur MS5837
+        pression = sensors.requestPress();
+        Temp =  sensors.requestTemp();
+        //PPO2 sur ADS1015
+        ppO2 = sensors.requestPpO2();
+        //Cell O2 en mV
+        CellO2_1 = sensors.requestCellO2_1();
+        CellO2_2 = sensors.requestCellO2_2();
     }
 }
 
-void callbackCozir()
+void Affichage_moniteur()
 {
-    while(serialCozir.readable()) {
-        if ((indexCozir  == size) || newMessageFlag) //éviter la saturation du buffer
-            serialCozir.getc();
-        else
-            reponse [indexCozir++] = serialCozir.getc();//chargement du buffer dans le message
-        if ((indexCozir == size) || (reponse[indexCozir-1] == '\n')) {//le message est complet ou nouvelle ligne ou autre si on veut...
-            reponse[indexCozir] = 0;
-            newMessageFlag  = true;
-        }
-    }
+    printf("  CO2           = %d\r\n"  , co2);
+    printf("  Pression      = %f\r\n", pression);
+    printf("  Temperature   = %f\r\n", Temp);
+    printf("  PPO2          = %d\r\n", ppO2);
+    printf("  Cell O2 n 1   = %d\r\n"  , CellO2_1);
+    printf("  Cell O2 n 2   = %d\r\n"  , CellO2_2);
+    printf("\r\n");
 }
 
+//Callback de l'intérruption des envois de commandes au Cozir
 void callbackParam()
 {
     while(serialMonit.readable()) {
@@ -54,48 +72,47 @@
     }
 }
 
-void decode_message(char rep[])
-{
-
-    sscanf (rep,"%s %5d", commande, &reponseInt);
-    serialMonit.printf("Message complet = %s\r\n\n", rep);
-    serialMonit.printf("Commande = %s\r\n", commande);
-    serialMonit.printf("Reponse  = %d\r\n\n", reponseInt);
-
-}
-
 int main()
 {
-    serialCozir.attach(&callbackCozir, Serial::RxIrq);
+     set_time(1256729737);
+    
+    sensors.Sensors_INIT(false, false, 5, SPOOLING, DIGI_FILTER32, CALIB_AIR);
 
     serialMonit.attach(&callbackParam, Serial::RxIrq);
 
-    serialMonit.printf("  Demarrage...Entrez les comandes COZIR\r\n");
-    
-    //Voir Datasheet..
-    //Ex : G
-    //Pas besoin d'écrire \r\n dans lemoniteur
-    //Passer en K 0 pour changer le A 32 ou A 16...sinon ça bloque...
-    //Ensuite re passer en K 1 ou K 2....
-    //Le Cozir restera dans le dernier mode rentré... 
+    serialMonit.printf("  Demarrage...\r\n\r\n  Entrez les comandes COZIR si besoin :\r\n");
 
-    while (1) {
+    thread.start(Sensors_thread);
+    
+    thread.set_priority(osPriorityRealtime);
+    
+    while (true) {
 
-        if (newMessageFlag) {
-            decode_message(reponse);
-            strcpy(reponse," ");
-            indexCozir = 0;
-            newMessageFlag = false;
-        }
+        //Démarrage du Timer mesurant le temps d'éxecution du code
+        REAL_RATE.start();
+
+        Affichage_moniteur();
         
         if (newParamFlag) {
             wait_ms(500);
             serialMonit.printf("Param = %s\r\n", param);
-            cozirSend(param);
+            sensors.cozirSend(param);
             wait_ms(500);
             strcpy(param," ");
             indexParam = 0;
             newParamFlag = false;
         }
+
+        wait(1);
+        
+        //Arrêt du Timer mesurant le temps d'éxecution du code
+        REAL_RATE.stop();
+        //Définition de la nouvelle valeur du temps d'échantillonage du PID.
+        RATE = REAL_RATE.read();
+        //Reset du Timer
+        REAL_RATE.reset();
+        printf("\r\n  Temps d'exécution de la boucle = %f\r\n", RATE);
+        printf("\r\n", "");
+        
     }
 }