mbed-os github

Dependencies:   ADS1015 Faulhaber HTU21D_mod MS5837_potless Sensor_Head_RevB_3 USBDevice_dfu Utilsdfu beep

Fork of ARNSRS_testDFU by POTLESS

main.cpp

Committer:
potless
Date:
2017-04-30
Revision:
1:bef7856b5c0a
Parent:
0:69d4b21d58e0
Child:
2:4a8bf1d53439

File content as of revision 1:bef7856b5c0a:

/* 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
*/ 


#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;
    
// 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(){
    setup(); //initialisation capteur
    while (1){
        serialMonit.printf("co2 COZIR= %d\r\n",requestCO2()*10); // on multiplie par 10 pour etre en ppm
        wait (1);
    } 
}