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
main.cpp@1:bef7856b5c0a, 2017-04-30 (annotated)
- 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?
User | Revision | Line number | New 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 | } |