mbed-os github
Dependencies: ADS1015 Faulhaber HTU21D_mod MS5837_potless Sensor_Head_RevB_3 USBDevice_dfu Utilsdfu beep
Fork of ARNSRS_testDFU by
main.cpp@2:4a8bf1d53439, 2017-04-30 (annotated)
- Committer:
- potless
- Date:
- Sun Apr 30 23:29:19 2017 +0000
- Revision:
- 2:4a8bf1d53439
- Parent:
- 1:bef7856b5c0a
- Child:
- 3:bc6d4222db12
mise ? jour m?thode interrogation COZIR; deux fonctions possibles : request (char commande) ou cozirSend (string commande); traite co2, hygrom?trie et temp?rature
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 | 2:4a8bf1d53439 | 4 | |
potless | 2:4a8bf1d53439 | 5 | procédures possibles sont : |
potless | 2:4a8bf1d53439 | 6 | request (char commande) - renvoie la valeur lue si la commande ne représente qu'un seul caractère (entre '') |
potless | 2:4a8bf1d53439 | 7 | cozirSend (string commande) - permet d'envoyer des commandes multicaractères (entre "") - exemple A 32 - donne la réponse obtenue |
potless | 2:4a8bf1d53439 | 8 | |
potless | 2:4a8bf1d53439 | 9 | |
potless | 2:4a8bf1d53439 | 10 | la fonction cozirSend est davantage "sécurisée" |
potless | 1:bef7856b5c0a | 11 | */ |
potless | 0:69d4b21d58e0 | 12 | |
potless | 0:69d4b21d58e0 | 13 | |
potless | 1:bef7856b5c0a | 14 | #include "mbed.h" |
potless | 2:4a8bf1d53439 | 15 | #include <string> |
potless | 1:bef7856b5c0a | 16 | |
potless | 1:bef7856b5c0a | 17 | Serial serialCozir (PA_11,PA_12,9600); |
potless | 1:bef7856b5c0a | 18 | Serial serialMonit (USBTX,USBRX,9600); |
potless | 2:4a8bf1d53439 | 19 | char reponse[20]; // buffer |
potless | 1:bef7856b5c0a | 20 | |
potless | 2:4a8bf1d53439 | 21 | |
potless | 1:bef7856b5c0a | 22 | /////////////////////////////////// |
potless | 1:bef7856b5c0a | 23 | // fonction de lecture capteur///// |
potless | 1:bef7856b5c0a | 24 | /////////////////////////////////// |
potless | 2:4a8bf1d53439 | 25 | int request(char commande) { |
potless | 1:bef7856b5c0a | 26 | int index=0; |
potless | 2:4a8bf1d53439 | 27 | char ch = ' ';; |
potless | 2:4a8bf1d53439 | 28 | int valeurCommande; |
potless | 0:69d4b21d58e0 | 29 | |
potless | 1:bef7856b5c0a | 30 | // interrogation capteur |
potless | 2:4a8bf1d53439 | 31 | do |
potless | 2:4a8bf1d53439 | 32 | { |
potless | 2:4a8bf1d53439 | 33 | if (serialCozir.writeable()) { |
potless | 2:4a8bf1d53439 | 34 | serialCozir.putc(commande); |
potless | 2:4a8bf1d53439 | 35 | serialCozir.putc('\r'); |
potless | 2:4a8bf1d53439 | 36 | serialCozir.putc('\n'); |
potless | 2:4a8bf1d53439 | 37 | } |
potless | 2:4a8bf1d53439 | 38 | |
potless | 2:4a8bf1d53439 | 39 | while (!serialCozir.readable()) {} |
potless | 2:4a8bf1d53439 | 40 | ch = serialCozir.getc(); |
potless | 2:4a8bf1d53439 | 41 | } |
potless | 2:4a8bf1d53439 | 42 | |
potless | 2:4a8bf1d53439 | 43 | while ( ch != commande); |
potless | 1:bef7856b5c0a | 44 | |
potless | 1:bef7856b5c0a | 45 | // attente réponse capteur |
potless | 1:bef7856b5c0a | 46 | // le format de la reponse est : Z xxxxx z yyyyy\r\n |
potless | 1:bef7856b5c0a | 47 | // c'est uniquement xxxxx qui nous interesse |
potless | 1:bef7856b5c0a | 48 | |
potless | 1:bef7856b5c0a | 49 | do |
potless | 1:bef7856b5c0a | 50 | { |
potless | 1:bef7856b5c0a | 51 | if (serialCozir.readable()) |
potless | 2:4a8bf1d53439 | 52 | { |
potless | 1:bef7856b5c0a | 53 | 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 | 2:4a8bf1d53439 | 54 | if (index<20) // index <n b de digits max attendus ? (test pour ne pas depasser la capacité du buffer) |
potless | 1:bef7856b5c0a | 55 | reponse[index++]=ch; // on stocke le caractere reçu et on passe au suivant |
potless | 2:4a8bf1d53439 | 56 | } |
potless | 1:bef7856b5c0a | 57 | } while (ch!='\n'); // on s'arrete de lire quand on a recu le retour à la ligne \n de la réponse |
potless | 1:bef7856b5c0a | 58 | |
potless | 1:bef7856b5c0a | 59 | //reponse[index++]='\x0'; // mettre un zero à la fin de la reponse |
potless | 2:4a8bf1d53439 | 60 | sscanf (reponse,"%5d\r\n",&valeurCommande); // on extrait le int de la chaine et on le stocke à l'adresse où pointe valeurCO2 |
potless | 2:4a8bf1d53439 | 61 | return valeurCommande; |
potless | 2:4a8bf1d53439 | 62 | } |
potless | 2:4a8bf1d53439 | 63 | |
potless | 2:4a8bf1d53439 | 64 | |
potless | 2:4a8bf1d53439 | 65 | ////////////////////////////////////// |
potless | 2:4a8bf1d53439 | 66 | // fonction communication capteur///// |
potless | 2:4a8bf1d53439 | 67 | // on peut envoyer des ordres avec /// |
potless | 2:4a8bf1d53439 | 68 | // plusieurs digits comme A 32 /// |
potless | 2:4a8bf1d53439 | 69 | ////////////////////////////////////// |
potless | 2:4a8bf1d53439 | 70 | int cozirSend(string commande) { |
potless | 2:4a8bf1d53439 | 71 | |
potless | 2:4a8bf1d53439 | 72 | |
potless | 2:4a8bf1d53439 | 73 | int index=0; |
potless | 2:4a8bf1d53439 | 74 | char ch = ' ';; |
potless | 2:4a8bf1d53439 | 75 | int reponseCommande; |
potless | 2:4a8bf1d53439 | 76 | int nbDigits = commande.size(); |
potless | 2:4a8bf1d53439 | 77 | |
potless | 2:4a8bf1d53439 | 78 | commande[nbDigits]='\x0'; // on matérialise la fin de la chaine avc '\x0' |
potless | 2:4a8bf1d53439 | 79 | |
potless | 2:4a8bf1d53439 | 80 | // interrogation capteur |
potless | 2:4a8bf1d53439 | 81 | do |
potless | 2:4a8bf1d53439 | 82 | { |
potless | 2:4a8bf1d53439 | 83 | if (serialCozir.writeable()) { |
potless | 2:4a8bf1d53439 | 84 | for (int j=0;j<nbDigits;j++) { |
potless | 2:4a8bf1d53439 | 85 | serialCozir.putc(commande[j]); |
potless | 2:4a8bf1d53439 | 86 | //serialMonit.printf(" commande digit %i sur %i => %c\r\n",j,nbDigits-1,commande[j]); // pour le debug |
potless | 2:4a8bf1d53439 | 87 | } |
potless | 2:4a8bf1d53439 | 88 | serialCozir.putc('\r'); |
potless | 2:4a8bf1d53439 | 89 | serialCozir.putc('\n'); |
potless | 2:4a8bf1d53439 | 90 | } |
potless | 2:4a8bf1d53439 | 91 | |
potless | 2:4a8bf1d53439 | 92 | while (!serialCozir.readable()) {}; |
potless | 2:4a8bf1d53439 | 93 | ch = serialCozir.getc(); |
potless | 2:4a8bf1d53439 | 94 | } |
potless | 2:4a8bf1d53439 | 95 | |
potless | 2:4a8bf1d53439 | 96 | while ( ch != commande[0]); // le format de la réponse reprend la première lettre de l'ordre |
potless | 2:4a8bf1d53439 | 97 | |
potless | 2:4a8bf1d53439 | 98 | // attente réponse capteur |
potless | 2:4a8bf1d53439 | 99 | // exemple pour co2 : le format de la reponse est Z xxxxx z yyyyy\r\n |
potless | 2:4a8bf1d53439 | 100 | // c'est uniquement xxxxx qui nous interesse |
potless | 2:4a8bf1d53439 | 101 | |
potless | 2:4a8bf1d53439 | 102 | do |
potless | 2:4a8bf1d53439 | 103 | { |
potless | 2:4a8bf1d53439 | 104 | if (serialCozir.readable()) |
potless | 2:4a8bf1d53439 | 105 | { |
potless | 2:4a8bf1d53439 | 106 | 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 | 2:4a8bf1d53439 | 107 | if (index<8) // index <n b de digits max attendus (les autres ne nous interessent pas) |
potless | 2:4a8bf1d53439 | 108 | reponse[index++]=ch; // on stocke le caractere reçu et on passe au suivant |
potless | 2:4a8bf1d53439 | 109 | } |
potless | 2:4a8bf1d53439 | 110 | } while (ch!='\n'); // on s'arrete de lire quand on a recu le retour à la ligne \n de la réponse |
potless | 2:4a8bf1d53439 | 111 | |
potless | 2:4a8bf1d53439 | 112 | //reponse[index++]='\x0'; // mettre un zero à la fin de la reponse |
potless | 2:4a8bf1d53439 | 113 | sscanf (reponse,"%5d\r\n",&reponseCommande); // on extrait le int de la chaine et on le stocke à l'adresse où pointe valeurCommande |
potless | 2:4a8bf1d53439 | 114 | //serialMonit.printf(" reponse recue => %5d\r\n",reponseCommande); // pour le debug |
potless | 2:4a8bf1d53439 | 115 | |
potless | 2:4a8bf1d53439 | 116 | return reponseCommande; |
potless | 2:4a8bf1d53439 | 117 | } |
potless | 2:4a8bf1d53439 | 118 | /////////////////////////////////// |
potless | 2:4a8bf1d53439 | 119 | // fonction initialisation ///// |
potless | 2:4a8bf1d53439 | 120 | /////////////////////////////////// |
potless | 2:4a8bf1d53439 | 121 | void setup(){ |
potless | 2:4a8bf1d53439 | 122 | |
potless | 2:4a8bf1d53439 | 123 | serialMonit.printf("reponse demande pooling => K %5i\r\n", cozirSend("K 2")); |
potless | 2:4a8bf1d53439 | 124 | serialMonit.printf("reponse demande filtrage => A %5i\r\n", cozirSend("A 32")); |
potless | 2:4a8bf1d53439 | 125 | serialMonit.printf("reponse calibration => G %5d\r\n", cozirSend("G")); |
potless | 2:4a8bf1d53439 | 126 | |
potless | 0:69d4b21d58e0 | 127 | } |
potless | 0:69d4b21d58e0 | 128 | |
potless | 1:bef7856b5c0a | 129 | ///////////////////////////////////// |
potless | 1:bef7856b5c0a | 130 | /// procédure principale ///////// |
potless | 1:bef7856b5c0a | 131 | ///////////////////////////////////// |
potless | 0:69d4b21d58e0 | 132 | |
potless | 0:69d4b21d58e0 | 133 | int main(){ |
potless | 1:bef7856b5c0a | 134 | setup(); //initialisation capteur |
potless | 2:4a8bf1d53439 | 135 | |
potless | 1:bef7856b5c0a | 136 | while (1){ |
potless | 2:4a8bf1d53439 | 137 | serialMonit.printf("co2 COZIR par methode cozirSend = %5d\r\n" ,cozirSend("Z")*10); // on multiplie par 10 pour etre en ppm |
potless | 2:4a8bf1d53439 | 138 | serialMonit.printf("co2 COZIR par methode request = %5d\r\n" ,request('Z')*10); // on multiplie par 10 pour etre en ppm (méthode précédente) |
potless | 2:4a8bf1d53439 | 139 | serialMonit.printf(" H COZIR par methode cozirSend = %5d\r\n" ,cozirSend ("H")); // à laisser comme ça pour transmettre en BLE mais à diviser par 10 à réception dans l'app android pour être en xx,x% |
potless | 2:4a8bf1d53439 | 140 | serialMonit.printf(" H COZIR par methode request = %5d\r\n" ,request('H')); // à laisser comme ça pour transmettre en BLE mais à diviser par 10 à réception dans l'app android pour être en xx,x% |
potless | 2:4a8bf1d53439 | 141 | serialMonit.printf(" T COZIR par methode cozirSend = %5d\r\n" ,cozirSend ("T")-1000); // à laisser comme ça pour envoi BLE et à diviser par 10 à réception dans l'app android pour etre en yy,y°C |
potless | 2:4a8bf1d53439 | 142 | serialMonit.printf(" T COZIR par methode request = %5d\r\n" ,request('T')-1000); // à laisser comme ça pour envoi BLE et à diviser par 10 à réception dans l'app android pour etre en yy,y°C |
potless | 1:bef7856b5c0a | 143 | wait (1); |
potless | 1:bef7856b5c0a | 144 | } |
potless | 1:bef7856b5c0a | 145 | } |