mbed-os github

Dependencies:   ADS1015 Faulhaber HTU21D_mod MS5837_potless Sensor_Head_RevB_3 USBDevice_dfu Utilsdfu beep

Fork of ARNSRS_testDFU by POTLESS

Committer:
POTLESS_2
Date:
Mon May 01 10:45:18 2017 +0000
Revision:
3:bc6d4222db12
Parent:
2:4a8bf1d53439
Child:
4:d84250f67dec
Rajout? ? l'aveugle une lib et le code pour afficher T et P du MS5803.; Tu testeras avec ton capteur...Comme ?a je test pour publier un code ;o)

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 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_2 3:bc6d4222db12 16 #include "MS5803_14BA.h"
POTLESS_2 3:bc6d4222db12 17
POTLESS_2 3:bc6d4222db12 18
POTLESS_2 3:bc6d4222db12 19 #ifdef TARGET_K64F
POTLESS_2 3:bc6d4222db12 20 #define SPI_SCK PTD1
POTLESS_2 3:bc6d4222db12 21 #define SPI_MOSI PTD2
POTLESS_2 3:bc6d4222db12 22 #define SPI_MISO PTD3
POTLESS_2 3:bc6d4222db12 23 #define SPI_CS PTD0
POTLESS_2 3:bc6d4222db12 24 #define I2C_SDA PTE25
POTLESS_2 3:bc6d4222db12 25 #define I2C_SCL PTE24
POTLESS_2 3:bc6d4222db12 26 #elif defined(TARGET_KL25Z)
POTLESS_2 3:bc6d4222db12 27 #define SPI_SCK PTD1
POTLESS_2 3:bc6d4222db12 28 #define SPI_MOSI PTD2
POTLESS_2 3:bc6d4222db12 29 #define SPI_MISO PTD3
POTLESS_2 3:bc6d4222db12 30 #define SPI_CS PTD0
POTLESS_2 3:bc6d4222db12 31 #define I2C_SDA PTE0
POTLESS_2 3:bc6d4222db12 32 #define I2C_SCL PTE1
POTLESS_2 3:bc6d4222db12 33 #endif
potless 1:bef7856b5c0a 34
potless 1:bef7856b5c0a 35 Serial serialCozir (PA_11,PA_12,9600);
potless 1:bef7856b5c0a 36 Serial serialMonit (USBTX,USBRX,9600);
potless 2:4a8bf1d53439 37 char reponse[20]; // buffer
POTLESS_2 3:bc6d4222db12 38 MS5803_14BA ps(D14, D15, MS5803_ADDRC_L, D1_OSR_4096, D2_OSR_4096); // SDA, SCL, I2C_address (0x76 or 0x77 look at MS5803.h)
potless 2:4a8bf1d53439 39
potless 1:bef7856b5c0a 40 ///////////////////////////////////
potless 1:bef7856b5c0a 41 // fonction de lecture capteur/////
potless 1:bef7856b5c0a 42 ///////////////////////////////////
potless 2:4a8bf1d53439 43 int request(char commande) {
potless 1:bef7856b5c0a 44 int index=0;
potless 2:4a8bf1d53439 45 char ch = ' ';;
potless 2:4a8bf1d53439 46 int valeurCommande;
potless 0:69d4b21d58e0 47
potless 1:bef7856b5c0a 48 // interrogation capteur
potless 2:4a8bf1d53439 49 do
potless 2:4a8bf1d53439 50 {
potless 2:4a8bf1d53439 51 if (serialCozir.writeable()) {
potless 2:4a8bf1d53439 52 serialCozir.putc(commande);
potless 2:4a8bf1d53439 53 serialCozir.putc('\r');
potless 2:4a8bf1d53439 54 serialCozir.putc('\n');
potless 2:4a8bf1d53439 55 }
potless 2:4a8bf1d53439 56
potless 2:4a8bf1d53439 57 while (!serialCozir.readable()) {}
potless 2:4a8bf1d53439 58 ch = serialCozir.getc();
potless 2:4a8bf1d53439 59 }
potless 2:4a8bf1d53439 60
potless 2:4a8bf1d53439 61 while ( ch != commande);
potless 1:bef7856b5c0a 62
potless 1:bef7856b5c0a 63 // attente réponse capteur
potless 1:bef7856b5c0a 64 // le format de la reponse est : Z xxxxx z yyyyy\r\n
potless 1:bef7856b5c0a 65 // c'est uniquement xxxxx qui nous interesse
potless 1:bef7856b5c0a 66
potless 1:bef7856b5c0a 67 do
potless 1:bef7856b5c0a 68 {
potless 1:bef7856b5c0a 69 if (serialCozir.readable())
potless 2:4a8bf1d53439 70 {
potless 1:bef7856b5c0a 71 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 72 if (index<20) // index <n b de digits max attendus ? (test pour ne pas depasser la capacité du buffer)
potless 1:bef7856b5c0a 73 reponse[index++]=ch; // on stocke le caractere reçu et on passe au suivant
potless 2:4a8bf1d53439 74 }
potless 1:bef7856b5c0a 75 } while (ch!='\n'); // on s'arrete de lire quand on a recu le retour à la ligne \n de la réponse
potless 1:bef7856b5c0a 76
potless 1:bef7856b5c0a 77 //reponse[index++]='\x0'; // mettre un zero à la fin de la reponse
potless 2:4a8bf1d53439 78 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 79 return valeurCommande;
potless 2:4a8bf1d53439 80 }
potless 2:4a8bf1d53439 81
potless 2:4a8bf1d53439 82
potless 2:4a8bf1d53439 83 //////////////////////////////////////
potless 2:4a8bf1d53439 84 // fonction communication capteur/////
potless 2:4a8bf1d53439 85 // on peut envoyer des ordres avec ///
potless 2:4a8bf1d53439 86 // plusieurs digits comme A 32 ///
potless 2:4a8bf1d53439 87 //////////////////////////////////////
potless 2:4a8bf1d53439 88 int cozirSend(string commande) {
potless 2:4a8bf1d53439 89
potless 2:4a8bf1d53439 90
potless 2:4a8bf1d53439 91 int index=0;
potless 2:4a8bf1d53439 92 char ch = ' ';;
potless 2:4a8bf1d53439 93 int reponseCommande;
potless 2:4a8bf1d53439 94 int nbDigits = commande.size();
potless 2:4a8bf1d53439 95
potless 2:4a8bf1d53439 96 commande[nbDigits]='\x0'; // on matérialise la fin de la chaine avc '\x0'
potless 2:4a8bf1d53439 97
potless 2:4a8bf1d53439 98 // interrogation capteur
potless 2:4a8bf1d53439 99 do
potless 2:4a8bf1d53439 100 {
potless 2:4a8bf1d53439 101 if (serialCozir.writeable()) {
potless 2:4a8bf1d53439 102 for (int j=0;j<nbDigits;j++) {
potless 2:4a8bf1d53439 103 serialCozir.putc(commande[j]);
potless 2:4a8bf1d53439 104 //serialMonit.printf(" commande digit %i sur %i => %c\r\n",j,nbDigits-1,commande[j]); // pour le debug
potless 2:4a8bf1d53439 105 }
potless 2:4a8bf1d53439 106 serialCozir.putc('\r');
potless 2:4a8bf1d53439 107 serialCozir.putc('\n');
potless 2:4a8bf1d53439 108 }
potless 2:4a8bf1d53439 109
potless 2:4a8bf1d53439 110 while (!serialCozir.readable()) {};
potless 2:4a8bf1d53439 111 ch = serialCozir.getc();
potless 2:4a8bf1d53439 112 }
potless 2:4a8bf1d53439 113
potless 2:4a8bf1d53439 114 while ( ch != commande[0]); // le format de la réponse reprend la première lettre de l'ordre
potless 2:4a8bf1d53439 115
potless 2:4a8bf1d53439 116 // attente réponse capteur
potless 2:4a8bf1d53439 117 // exemple pour co2 : le format de la reponse est Z xxxxx z yyyyy\r\n
potless 2:4a8bf1d53439 118 // c'est uniquement xxxxx qui nous interesse
potless 2:4a8bf1d53439 119
potless 2:4a8bf1d53439 120 do
potless 2:4a8bf1d53439 121 {
potless 2:4a8bf1d53439 122 if (serialCozir.readable())
potless 2:4a8bf1d53439 123 {
potless 2:4a8bf1d53439 124 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 125 if (index<8) // index <n b de digits max attendus (les autres ne nous interessent pas)
potless 2:4a8bf1d53439 126 reponse[index++]=ch; // on stocke le caractere reçu et on passe au suivant
potless 2:4a8bf1d53439 127 }
potless 2:4a8bf1d53439 128 } while (ch!='\n'); // on s'arrete de lire quand on a recu le retour à la ligne \n de la réponse
potless 2:4a8bf1d53439 129
potless 2:4a8bf1d53439 130 //reponse[index++]='\x0'; // mettre un zero à la fin de la reponse
potless 2:4a8bf1d53439 131 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 132 //serialMonit.printf(" reponse recue => %5d\r\n",reponseCommande); // pour le debug
potless 2:4a8bf1d53439 133
potless 2:4a8bf1d53439 134 return reponseCommande;
potless 2:4a8bf1d53439 135 }
potless 2:4a8bf1d53439 136 ///////////////////////////////////
potless 2:4a8bf1d53439 137 // fonction initialisation /////
potless 2:4a8bf1d53439 138 ///////////////////////////////////
potless 2:4a8bf1d53439 139 void setup(){
potless 2:4a8bf1d53439 140
potless 2:4a8bf1d53439 141 serialMonit.printf("reponse demande pooling => K %5i\r\n", cozirSend("K 2"));
potless 2:4a8bf1d53439 142 serialMonit.printf("reponse demande filtrage => A %5i\r\n", cozirSend("A 32"));
potless 2:4a8bf1d53439 143 serialMonit.printf("reponse calibration => G %5d\r\n", cozirSend("G"));
potless 2:4a8bf1d53439 144
potless 0:69d4b21d58e0 145 }
potless 0:69d4b21d58e0 146
potless 1:bef7856b5c0a 147 /////////////////////////////////////
potless 1:bef7856b5c0a 148 /// procédure principale /////////
potless 1:bef7856b5c0a 149 /////////////////////////////////////
potless 0:69d4b21d58e0 150
potless 0:69d4b21d58e0 151 int main(){
potless 1:bef7856b5c0a 152 setup(); //initialisation capteur
potless 2:4a8bf1d53439 153
potless 1:bef7856b5c0a 154 while (1){
POTLESS_2 3:bc6d4222db12 155 serialMonit.printf(" co2 COZIR par methode cozirSend = %5d\r\n" ,cozirSend("Z")*10); // on multiplie par 10 pour etre en ppm
POTLESS_2 3:bc6d4222db12 156 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 157 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 158 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 159 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 160 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_2 3:bc6d4222db12 161 ps.convert();
POTLESS_2 3:bc6d4222db12 162 serialMonit.printf(" Pression MS5803 = %4.1f\r\n", ps.pressure);
POTLESS_2 3:bc6d4222db12 163 serialMonit.printf(" Température MS5803 = %4.1f\r\n", ps.temperature);
potless 1:bef7856b5c0a 164 wait (1);
POTLESS_2 3:bc6d4222db12 165 }}