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 POTLESS

Committer:
potless
Date:
Sun Apr 30 09:05:42 2017 +0000
Revision:
1:bef7856b5c0a
Parent:
0:69d4b21d58e0
Child:
2:4a8bf1d53439
fonctionnel - lecture capteur sur serial6 - envoi des donn?es sur serial usb

Who changed what in which revision?

UserRevisionLine numberNew contents of line
potless 1:bef7856b5c0a 1 /* procédure lecture capteur COZIR ou MINIR - CO2 seul
potless 1:bef7856b5c0a 2 sur broches F401RE SERIAL PA_11 et PA_12
potless 1:bef7856b5c0a 3 renvoie sur moniteur (IDE arduino par exemple) de la valeur lue
potless 1:bef7856b5c0a 4 */
potless 0:69d4b21d58e0 5
potless 0:69d4b21d58e0 6
potless 1:bef7856b5c0a 7 #include "mbed.h"
potless 1:bef7856b5c0a 8
potless 1:bef7856b5c0a 9 Serial serialCozir (PA_11,PA_12,9600);
potless 1:bef7856b5c0a 10 Serial serialMonit (USBTX,USBRX,9600);
potless 1:bef7856b5c0a 11 char reponse[6]; // buffer
potless 1:bef7856b5c0a 12
potless 1:bef7856b5c0a 13 ///////////////////////////////////
potless 1:bef7856b5c0a 14 // fonction initialisation /////
potless 1:bef7856b5c0a 15 ///////////////////////////////////
potless 1:bef7856b5c0a 16 void setup(){
potless 1:bef7856b5c0a 17 serialCozir.puts("K 2\r\n"); // mode interrogation
potless 1:bef7856b5c0a 18 serialMonit.printf("reponse au mode pooling %s\r\n",serialCozir.gets(reponse,5));
potless 1:bef7856b5c0a 19 serialCozir.puts("A 32\r\n"); // filtrage standard
potless 1:bef7856b5c0a 20 serialMonit.printf("reponse au mode filtrage %s\r\n",serialCozir.gets(reponse,5));
potless 1:bef7856b5c0a 21 serialCozir.puts("G\r\n"); // calibration à l'air libre
potless 1:bef7856b5c0a 22 serialMonit.printf("reponse au mode calib %s\r\n",serialCozir.gets(reponse,5));
potless 1:bef7856b5c0a 23 }
potless 1:bef7856b5c0a 24 ///////////////////////////////////
potless 1:bef7856b5c0a 25 // fonction de lecture capteur/////
potless 1:bef7856b5c0a 26 ///////////////////////////////////
potless 1:bef7856b5c0a 27 int requestCO2() {
potless 1:bef7856b5c0a 28 int index=0;
potless 1:bef7856b5c0a 29 char ch;
potless 1:bef7856b5c0a 30 int valeurCO2;
potless 0:69d4b21d58e0 31
potless 1:bef7856b5c0a 32 // interrogation capteur
potless 1:bef7856b5c0a 33 serialCozir.puts("Z\r\n");
potless 1:bef7856b5c0a 34
potless 1:bef7856b5c0a 35 // attente réponse capteur
potless 1:bef7856b5c0a 36 // le format de la reponse est : Z xxxxx z yyyyy\r\n
potless 1:bef7856b5c0a 37 // c'est uniquement xxxxx qui nous interesse
potless 1:bef7856b5c0a 38
potless 1:bef7856b5c0a 39 do
potless 1:bef7856b5c0a 40 {
potless 1:bef7856b5c0a 41 if (serialCozir.readable())
potless 1:bef7856b5c0a 42 {
potless 1:bef7856b5c0a 43 do
potless 1:bef7856b5c0a 44 {ch = serialCozir.getc(); // on lit les caractères entrant jusqu'à recevoir la lettre Z majuscule
potless 1:bef7856b5c0a 45 }
potless 1:bef7856b5c0a 46 while (ch=='Z');
potless 1:bef7856b5c0a 47
potless 1:bef7856b5c0a 48 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
potless 1:bef7856b5c0a 49 if (index<6) // index <n b de digits max attendus ? (test pour ne pas depasser la capacité du buffer)
potless 1:bef7856b5c0a 50 reponse[index++]=ch; // on stocke le caractere reçu et on passe au suivant
potless 1:bef7856b5c0a 51 }
potless 1:bef7856b5c0a 52 } while (ch!='\n'); // on s'arrete de lire quand on a recu le retour à la ligne \n de la réponse
potless 1:bef7856b5c0a 53
potless 1:bef7856b5c0a 54 //reponse[index++]='\x0'; // mettre un zero à la fin de la reponse
potless 1:bef7856b5c0a 55 sscanf (reponse,"%5d\r\n",&valeurCO2); // on extrait le int de la chaine et on le stocke à l'adresse où pointe valeurCO2
potless 1:bef7856b5c0a 56 return valeurCO2;
potless 0:69d4b21d58e0 57 }
potless 0:69d4b21d58e0 58
potless 1:bef7856b5c0a 59 /////////////////////////////////////
potless 1:bef7856b5c0a 60 /// procédure principale /////////
potless 1:bef7856b5c0a 61 /////////////////////////////////////
potless 0:69d4b21d58e0 62
potless 0:69d4b21d58e0 63 int main(){
potless 1:bef7856b5c0a 64 setup(); //initialisation capteur
potless 1:bef7856b5c0a 65 while (1){
potless 1:bef7856b5c0a 66 serialMonit.printf("co2 COZIR= %d\r\n",requestCO2()*10); // on multiplie par 10 pour etre en ppm
potless 1:bef7856b5c0a 67 wait (1);
potless 1:bef7856b5c0a 68 }
potless 1:bef7856b5c0a 69 }