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:
9:04bfdfc029cb
Parent:
8:a750d531b381
Child:
10:aca745a66d51
diff -r a750d531b381 -r 04bfdfc029cb main.cpp
--- a/main.cpp	Wed Sep 27 08:02:47 2017 +0000
+++ b/main.cpp	Tue Oct 03 15:55:23 2017 +0000
@@ -3,22 +3,41 @@
 #include "Sensor_head_revB.h"
 #include "HTU21D.h"
 
+
+//Ecrit dans le moniteur série de la tablette à 9600 bds si sur 1, penser à mettre NEED_CONSOLE_OUTPUT à 0
+#define NEED_ANDROID_OUTPUT 1
+
+
+#if NEED_ANDROID_OUTPUT
+#define ANDROID(...) { android.printf(__VA_ARGS__); }
+#else
+#define ANDROID(...)
+#endif
+
 //Moniteur série
-Serial serialMonit (USBTX,USBRX,9600);
+Serial serialMonit(USBTX,USBRX,9600);
+//COM Série vers Android, Serial 3
+Serial android(PC_10,PC_11,9600);
 
 //Init de la lib ARNSRS;
 SENSOR_HEAD_REV_B sensors;
 
 //pour Param Cozir
-const int sizeParam = 6;
+const int sizeParam = 20;
 char  param[sizeParam ];
 int indexParam;
 bool newParamFlag = false;
 
+//pour Commandes Android
+const int sizeAndroid = 20;
+char  Android[sizeParam ];
+int indexAndroid;
+bool newAndroidFlag = false;
+
 //Variables de stockage des infos capteurs
 int co2 = 0;
 float pression = 0;
-float Temp = 0;
+float Temp1 = 0;
 int ppO2 = 0;
 int CellO2_1 = 0;
 int CellO2_2 = 0;
@@ -29,10 +48,12 @@
 
 //HTU21D
 HTU21D temphumid(PB_9, PB_8); //Temp humid sensor || SDA, SCL
-int sample_ftemp;
-float sample_ctemp;
-int sample_ktemp;
-int sample_humid;
+float Temp2;
+int Humid;
+
+//Data LOG
+char to_store[50];
+time_t seconds;
 
 //VT100
 static const char CLS[] = "\x1B[2J";
@@ -49,49 +70,75 @@
         co2 = sensors.requestCO2();
         //P / T sur MS5837
         pression = sensors.requestPress();
-        Temp =  sensors.requestTemp();
+        Temp1 =  sensors.requestTemp();
         //PPO2 sur ADS1015
         ppO2 = sensors.requestPpO2();
         //Cell O2 en mV
         CellO2_1 = sensors.requestCellO2_1();
         CellO2_2 = sensors.requestCellO2_2();
-        
+
         //HTU21D
-        //sample_ftemp = temphumid.sample_ftemp();
-        sample_ctemp = temphumid.sample_ctemp();
-        //sample_ktemp = temphumid.sample_ktemp();
-        sample_humid = temphumid.sample_humid();
+        Temp2 = temphumid.sample_ctemp();
+        Humid = temphumid.sample_humid();
+
+        //Fabrication de la chaine Date / heure
+        seconds = time(NULL);
+        char Time_buf[32];
+        strftime(Time_buf, 32, "%D %I-%M-%S ", localtime(&seconds));
+
+        //Fabrication de la chaine à enregistrer
+        sprintf(to_store,"<%s:%d:%d:%.2f:%.2f:%.2f:%d:%d:%d>",
+                Time_buf,
+                co2,
+                ppO2,
+                pression,
+                Temp1,
+                Temp2,
+                Humid,
+                CellO2_1,
+                CellO2_2);
     }
 }
 
 void Affichage_moniteur()
 {
-    
-    printf("  CO2             = %d\r\n"  , co2);
-    printf("  PPO2            = %d\r\n", ppO2);
-    printf("  Pression        = %f\r\n", pression);
-    printf("  Temperature 1   = %f\r\n", Temp);
-    printf("  Temperature 2   = %f C\n\r", sample_ctemp);
-    printf("  Humidity        = %d %%\n\r", sample_humid);
+    printf("\r\n");
+    printf("  CO2             = %d ppm\r\n"  , co2);
+    printf("  PPO2            = %d mb\r\n", ppO2);
+    printf("  Pression        = %f msw\r\n", pression);
+    printf("  Temperature 1   = %f C\r\n", Temp1);
+    printf("  Temperature 2   = %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("Temperature: %d F\n\r", sample_ftemp);    
-    //printf("Temperature: %d K\n\r", sample_ktemp);    
-    
-   
+    printf("\n");
+    printf("Temps d execution de la boucle = %f secondes\n", RATE);
+    printf("\r\n", "");
+    printf("A enregistrer = %s\n", to_store);
+    printf("\r\n");
+
     /*
     printf(HOME);
     printf("\x1b[30m");
-    printf("\x1b[0m\r  CO2          = \x1b[1m\x1b[K%d\n", co2);
-    printf("\x1b[0m\r  Pression     = \x1b[1m\x1b[K%f\n", pression);
-    printf("\x1b[0m\r  Temperature  = \x1b[1m\x1b[K%f\n", Temp);
-    printf("\x1b[0m\r  PPO2         = \x1b[1m\x1b[K%d\n", ppO2);
+    printf("\x1b[0m\r  CO2           = \x1b[1m\x1b[K%d ppm\n", co2);
+    printf("\x1b[0m\r  PPO2          = \x1b[1m\x1b[K%d mb\n", ppO2);
+    printf("\n");
+    printf("\x1b[0m\r  Pression      = \x1b[1m\x1b[K%.2f msw\n", pression);
+    printf("\n");
+    printf("\x1b[0m\r  Temperature 1 = \x1b[1m\x1b[K%.2f C\n", Temp1);
+    printf("\x1b[0m\r  Temperature 2 = \x1b[1m\x1b[K%.2f C\n", Temp2);
+    printf("\n");
+    printf("\x1b[0m\r  Humidity      = \x1b[1m\x1b[K%d %\n", Humid);
+    printf("\n");
     printf("\x1b[0m\r  Cell O2 n 1  = \x1b[1m\x1b[K%d\n", CellO2_1);
     printf("\x1b[0m\r  Cell O2 n 2  = \x1b[1m\x1b[K%d\n", CellO2_2);
     printf("\n");
+    printf("\x1b[0m\r  Temps d execution de la boucle = \x1b[1m\x1b[K%f secondes\n", RATE);
+    printf("\r\n", "");
+    printf("\x1b[0m\r  A enregistrer = \x1b[1m\x1b[K%s\n", to_store);
+    printf("\r\n", "");
     */
 }
 
@@ -110,49 +157,114 @@
     }
 }
 
+
+//Callback de l'intérruption des envois de commandes depuis Android
+void callbackAndroid()
+{
+    while(android.readable()) {
+        if (indexAndroid  == sizeAndroid) //éviter la saturation du buffer
+            android.getc();
+        else
+            Android [indexAndroid++] = android.getc();//chargement du buffer dans le message
+        if ((indexAndroid == sizeAndroid) || (Android[indexAndroid -1] == '\n')) {//le message est complet ou nouvelle ligne ou autre si on veut...
+            Android[indexAndroid] = 0;
+            newAndroidFlag  = true;
+        }
+    }
+}
+void Decoding_Message(char message [])
+{
+    char *commande = 0;
+    int valeur = 0;
+
+    sscanf(message,"%s %d",&commande , &valeur);
+
+    if ((char)commande == 'T') {
+        set_time(valeur);
+    } else {
+        sensors.cozirSend(message);
+    }
+
+    //wait_ms(500);
+    strcpy(param," ");
+    indexParam = 0;
+    newParamFlag = false;
+}
+
+void Decoding_Message_Android(char message [])
+{
+    char *commande = 0;
+    int valeur = 0;
+
+    sscanf(message,"%s %d",&commande , &valeur);
+
+    if ((char)commande == 'T') {
+        set_time(valeur);
+    } else if ((char)commande == 'R') {
+        NVIC_SystemReset();
+    }
+
+    //wait_ms(500);
+    strcpy(Android," ");
+    indexAndroid = 0;
+    newAndroidFlag = false;
+}
+
 int main()
 {
-    set_time(1256729737);
-    
-    sensors.Sensors_INIT(false, false, 5, SPOOLING, DIGI_FILTER32, CALIB_AIR);
+    //UNIX TIMESTAMP depuis le erminal MAC =       date +%s         + 7200 pour heure d'été.....
+
+    sensors.Sensors_INIT(false, true, 5, SPOOLING, DIGI_FILTER32, CALIB_AIR);
 
     serialMonit.attach(&callbackParam, Serial::RxIrq);
 
+    android.attach(&callbackAndroid, Serial::RxIrq);
+
     serialMonit.printf("  Demarrage...\r\n\r\n  Entrez les comandes COZIR si besoin :\r\n");
 
     thread.start(Sensors_thread);
-    
+
     thread.set_priority(osPriorityRealtime);
-    
+
     printf(CLS);
-    
+
     while (true) {
 
         //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);
-            sensors.cozirSend(param);
+            Decoding_Message(param);
+        }
+
+        if (newAndroidFlag) {
             wait_ms(500);
-            strcpy(param," ");
-            indexParam = 0;
-            newParamFlag = false;
+            serialMonit.printf("Android = %s\r\n", Android);
+            Decoding_Message_Android(Android);
         }
 
-        wait(1);
-        
+        //Vers Android
+        if (NEED_ANDROID_OUTPUT == 1) {
+            ANDROID(to_store);
+            //build_send_Message_int("t", co2, ppO2);
+            //build_send_Message_float("v", Temp1, pression);
+            //build_send_Message_int("m", CellO2_1, CellO2_2);
+        }
+
+        wait_ms(500);
+
+        sensors.Write_SD((string)to_store);
+
         //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 execution de la boucle = %f\r\n", RATE);
-        printf("\r\n", "");
-        
+
     }
 }