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:
1:bef7856b5c0a
Parent:
0:69d4b21d58e0
Child:
2:4a8bf1d53439
--- a/main.cpp	Sat Apr 29 01:26:37 2017 +0000
+++ b/main.cpp	Sun Apr 30 09:05:42 2017 +0000
@@ -1,35 +1,69 @@
-#include "mbed.h"
-
-Serial serialCozir (PA_9,PA_10,9600);
-Serial serialMonit (USBTX,USBRX,9600);
-int co2=0;
-char buffer[6];
-
-
-
-    
+/* procédure lecture capteur COZIR ou MINIR - CO2 seul
+sur broches F401RE SERIAL PA_11 et PA_12
+renvoie sur moniteur (IDE arduino par exemple) de la valeur lue
+*/ 
 
 
-int requestCO2() {
-    int result = 0;
-    int i;
-    // demander les ppm de CO2 au capteur (Z majuscule lire notice) en mode pooling    
+#include "mbed.h"
+
+Serial serialCozir (PA_11,PA_12,9600);
+Serial serialMonit (USBTX,USBRX,9600);
+char reponse[6]; // buffer 
+
+///////////////////////////////////
+// fonction initialisation    /////
+///////////////////////////////////
+void setup(){
+serialCozir.puts("K 2\r\n"); // mode interrogation
+serialMonit.printf("reponse au mode pooling %s\r\n",serialCozir.gets(reponse,5));
+serialCozir.puts("A 32\r\n"); // filtrage standard
+serialMonit.printf("reponse au mode filtrage %s\r\n",serialCozir.gets(reponse,5));
+serialCozir.puts("G\r\n"); // calibration à l'air libre
+serialMonit.printf("reponse au mode calib %s\r\n",serialCozir.gets(reponse,5));
+}
+///////////////////////////////////
+// fonction de lecture capteur/////
+///////////////////////////////////
+int requestCO2() { 
+int index=0;
+char ch;
+int valeurCO2;
     
-    serialCozir.printf("Z\r\n");
-    while (serialCozir.getc() != 'Z' ) { // on attend la réponse en Z majuscule
-         }
-         
-    for (i=1;i<6;i++){
-        buffer[i]=serialCozir.getc();
-        }
-      buffer[i] = '\0';
-      atoi(&buffer[6]);  
-    return result;
+// interrogation capteur
+serialCozir.puts("Z\r\n");
+
+// attente réponse capteur
+// le format de la reponse est :     Z xxxxx z yyyyy\r\n
+// c'est uniquement xxxxx qui nous interesse
+
+do
+{ 
+   if (serialCozir.readable())      
+   {
+      do
+      {ch = serialCozir.getc(); // on lit les caractères entrant jusqu'à recevoir la lettre Z majuscule
+      }
+      while (ch=='Z');
+      
+      ch = serialCozir.getc();  // on a reçu Z, on continue de lire la valeur qui suit en stockant caractère par caractère dans une chaine
+      if (index<6)     // index <n b de digits max attendus ? (test pour ne pas depasser la capacité du buffer)    
+         reponse[index++]=ch;  // on stocke le caractere reçu et on passe au suivant
+  }
+} while (ch!='\n');    // on s'arrete de lire quand on a recu le retour à la ligne \n de la réponse 
+ 
+//reponse[index++]='\x0';  //  mettre un zero à la fin de la reponse
+sscanf (reponse,"%5d\r\n",&valeurCO2); // on extrait le int de la chaine et on le stocke à l'adresse où pointe valeurCO2
+return valeurCO2;
 }
 
+/////////////////////////////////////
+/// procédure principale    /////////
+/////////////////////////////////////
 
 int main(){
-    serialMonit.printf("co2 = %d\r\n",requestCO2);
-    wait (1);
-    
-    }
\ No newline at end of file
+    setup(); //initialisation capteur
+    while (1){
+        serialMonit.printf("co2 COZIR= %d\r\n",requestCO2()*10); // on multiplie par 10 pour etre en ppm
+        wait (1);
+    } 
+}
\ No newline at end of file