une 30aine passés sans pb entre les trames
Dependencies: ADS1015 ARNSRS_SENSORS DmTftLibrary MS5803_14BA SDFileSystem mbed
Fork of ARNSRS_SERVOS_USB_TFT by
Diff: main.cpp
- 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