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:
Tue Oct 03 15:55:23 2017 +0000
Revision:
9:04bfdfc029cb
Parent:
8:a750d531b381
Child:
10:aca745a66d51
Derni?re version.; HTU21D et com android.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
potless 1:bef7856b5c0a 1 #include "mbed.h"
potless 2:4a8bf1d53439 2 #include <string>
POTLESS_2 7:ad15c386e960 3 #include "Sensor_head_revB.h"
POTLESS_2 8:a750d531b381 4 #include "HTU21D.h"
POTLESS_2 4:d84250f67dec 5
POTLESS_2 9:04bfdfc029cb 6
POTLESS_2 9:04bfdfc029cb 7 //Ecrit dans le moniteur série de la tablette à 9600 bds si sur 1, penser à mettre NEED_CONSOLE_OUTPUT à 0
POTLESS_2 9:04bfdfc029cb 8 #define NEED_ANDROID_OUTPUT 1
POTLESS_2 9:04bfdfc029cb 9
POTLESS_2 9:04bfdfc029cb 10
POTLESS_2 9:04bfdfc029cb 11 #if NEED_ANDROID_OUTPUT
POTLESS_2 9:04bfdfc029cb 12 #define ANDROID(...) { android.printf(__VA_ARGS__); }
POTLESS_2 9:04bfdfc029cb 13 #else
POTLESS_2 9:04bfdfc029cb 14 #define ANDROID(...)
POTLESS_2 9:04bfdfc029cb 15 #endif
POTLESS_2 9:04bfdfc029cb 16
POTLESS_2 7:ad15c386e960 17 //Moniteur série
POTLESS_2 9:04bfdfc029cb 18 Serial serialMonit(USBTX,USBRX,9600);
POTLESS_2 9:04bfdfc029cb 19 //COM Série vers Android, Serial 3
POTLESS_2 9:04bfdfc029cb 20 Serial android(PC_10,PC_11,9600);
POTLESS_2 4:d84250f67dec 21
POTLESS_2 7:ad15c386e960 22 //Init de la lib ARNSRS;
POTLESS_2 7:ad15c386e960 23 SENSOR_HEAD_REV_B sensors;
potless 2:4a8bf1d53439 24
POTLESS_2 6:ebed9093d661 25 //pour Param Cozir
POTLESS_2 9:04bfdfc029cb 26 const int sizeParam = 20;
POTLESS_2 6:ebed9093d661 27 char param[sizeParam ];
POTLESS_2 6:ebed9093d661 28 int indexParam;
POTLESS_2 6:ebed9093d661 29 bool newParamFlag = false;
potless 2:4a8bf1d53439 30
POTLESS_2 9:04bfdfc029cb 31 //pour Commandes Android
POTLESS_2 9:04bfdfc029cb 32 const int sizeAndroid = 20;
POTLESS_2 9:04bfdfc029cb 33 char Android[sizeParam ];
POTLESS_2 9:04bfdfc029cb 34 int indexAndroid;
POTLESS_2 9:04bfdfc029cb 35 bool newAndroidFlag = false;
POTLESS_2 9:04bfdfc029cb 36
POTLESS_2 7:ad15c386e960 37 //Variables de stockage des infos capteurs
POTLESS_2 7:ad15c386e960 38 int co2 = 0;
POTLESS_2 7:ad15c386e960 39 float pression = 0;
POTLESS_2 9:04bfdfc029cb 40 float Temp1 = 0;
POTLESS_2 7:ad15c386e960 41 int ppO2 = 0;
POTLESS_2 7:ad15c386e960 42 int CellO2_1 = 0;
POTLESS_2 7:ad15c386e960 43 int CellO2_2 = 0;
POTLESS_2 7:ad15c386e960 44
POTLESS_2 7:ad15c386e960 45 //Mesure du tempsd'éxecution du loop
POTLESS_2 7:ad15c386e960 46 Timer REAL_RATE;
POTLESS_2 7:ad15c386e960 47 float RATE = 0;
POTLESS_2 7:ad15c386e960 48
POTLESS_2 8:a750d531b381 49 //HTU21D
POTLESS_2 8:a750d531b381 50 HTU21D temphumid(PB_9, PB_8); //Temp humid sensor || SDA, SCL
POTLESS_2 9:04bfdfc029cb 51 float Temp2;
POTLESS_2 9:04bfdfc029cb 52 int Humid;
POTLESS_2 9:04bfdfc029cb 53
POTLESS_2 9:04bfdfc029cb 54 //Data LOG
POTLESS_2 9:04bfdfc029cb 55 char to_store[50];
POTLESS_2 9:04bfdfc029cb 56 time_t seconds;
POTLESS_2 8:a750d531b381 57
POTLESS_2 8:a750d531b381 58 //VT100
POTLESS_2 8:a750d531b381 59 static const char CLS[] = "\x1B[2J";
POTLESS_2 8:a750d531b381 60 static const char HOME[] = "\x1B[H";
POTLESS_2 8:a750d531b381 61
POTLESS_2 7:ad15c386e960 62 //Thread d'intérogation des capteurs
POTLESS_2 7:ad15c386e960 63 Thread thread;
POTLESS_2 7:ad15c386e960 64
POTLESS_2 7:ad15c386e960 65 void Sensors_thread()
POTLESS_2 6:ebed9093d661 66 {
POTLESS_2 7:ad15c386e960 67 while (true) {
POTLESS_2 7:ad15c386e960 68
POTLESS_2 7:ad15c386e960 69 //CO2 sur Cozir
POTLESS_2 7:ad15c386e960 70 co2 = sensors.requestCO2();
POTLESS_2 7:ad15c386e960 71 //P / T sur MS5837
POTLESS_2 7:ad15c386e960 72 pression = sensors.requestPress();
POTLESS_2 9:04bfdfc029cb 73 Temp1 = sensors.requestTemp();
POTLESS_2 7:ad15c386e960 74 //PPO2 sur ADS1015
POTLESS_2 7:ad15c386e960 75 ppO2 = sensors.requestPpO2();
POTLESS_2 7:ad15c386e960 76 //Cell O2 en mV
POTLESS_2 7:ad15c386e960 77 CellO2_1 = sensors.requestCellO2_1();
POTLESS_2 7:ad15c386e960 78 CellO2_2 = sensors.requestCellO2_2();
POTLESS_2 9:04bfdfc029cb 79
POTLESS_2 8:a750d531b381 80 //HTU21D
POTLESS_2 9:04bfdfc029cb 81 Temp2 = temphumid.sample_ctemp();
POTLESS_2 9:04bfdfc029cb 82 Humid = temphumid.sample_humid();
POTLESS_2 9:04bfdfc029cb 83
POTLESS_2 9:04bfdfc029cb 84 //Fabrication de la chaine Date / heure
POTLESS_2 9:04bfdfc029cb 85 seconds = time(NULL);
POTLESS_2 9:04bfdfc029cb 86 char Time_buf[32];
POTLESS_2 9:04bfdfc029cb 87 strftime(Time_buf, 32, "%D %I-%M-%S ", localtime(&seconds));
POTLESS_2 9:04bfdfc029cb 88
POTLESS_2 9:04bfdfc029cb 89 //Fabrication de la chaine à enregistrer
POTLESS_2 9:04bfdfc029cb 90 sprintf(to_store,"<%s:%d:%d:%.2f:%.2f:%.2f:%d:%d:%d>",
POTLESS_2 9:04bfdfc029cb 91 Time_buf,
POTLESS_2 9:04bfdfc029cb 92 co2,
POTLESS_2 9:04bfdfc029cb 93 ppO2,
POTLESS_2 9:04bfdfc029cb 94 pression,
POTLESS_2 9:04bfdfc029cb 95 Temp1,
POTLESS_2 9:04bfdfc029cb 96 Temp2,
POTLESS_2 9:04bfdfc029cb 97 Humid,
POTLESS_2 9:04bfdfc029cb 98 CellO2_1,
POTLESS_2 9:04bfdfc029cb 99 CellO2_2);
POTLESS_2 4:d84250f67dec 100 }
potless 2:4a8bf1d53439 101 }
POTLESS_2 4:d84250f67dec 102
POTLESS_2 7:ad15c386e960 103 void Affichage_moniteur()
POTLESS_2 4:d84250f67dec 104 {
POTLESS_2 9:04bfdfc029cb 105 printf("\r\n");
POTLESS_2 9:04bfdfc029cb 106 printf(" CO2 = %d ppm\r\n" , co2);
POTLESS_2 9:04bfdfc029cb 107 printf(" PPO2 = %d mb\r\n", ppO2);
POTLESS_2 9:04bfdfc029cb 108 printf(" Pression = %f msw\r\n", pression);
POTLESS_2 9:04bfdfc029cb 109 printf(" Temperature 1 = %f C\r\n", Temp1);
POTLESS_2 9:04bfdfc029cb 110 printf(" Temperature 2 = %f C\n\r", Temp2);
POTLESS_2 9:04bfdfc029cb 111 printf(" Humidity = %d %%\n\r", Humid);
POTLESS_2 8:a750d531b381 112 printf("\n\r");
POTLESS_2 8:a750d531b381 113 printf(" Cell O2 n 1 = %d\r\n" , CellO2_1);
POTLESS_2 8:a750d531b381 114 printf(" Cell O2 n 2 = %d\r\n" , CellO2_2);
POTLESS_2 7:ad15c386e960 115 printf("\r\n");
POTLESS_2 9:04bfdfc029cb 116 printf("\n");
POTLESS_2 9:04bfdfc029cb 117 printf("Temps d execution de la boucle = %f secondes\n", RATE);
POTLESS_2 9:04bfdfc029cb 118 printf("\r\n", "");
POTLESS_2 9:04bfdfc029cb 119 printf("A enregistrer = %s\n", to_store);
POTLESS_2 9:04bfdfc029cb 120 printf("\r\n");
POTLESS_2 9:04bfdfc029cb 121
POTLESS_2 8:a750d531b381 122 /*
POTLESS_2 8:a750d531b381 123 printf(HOME);
POTLESS_2 8:a750d531b381 124 printf("\x1b[30m");
POTLESS_2 9:04bfdfc029cb 125 printf("\x1b[0m\r CO2 = \x1b[1m\x1b[K%d ppm\n", co2);
POTLESS_2 9:04bfdfc029cb 126 printf("\x1b[0m\r PPO2 = \x1b[1m\x1b[K%d mb\n", ppO2);
POTLESS_2 9:04bfdfc029cb 127 printf("\n");
POTLESS_2 9:04bfdfc029cb 128 printf("\x1b[0m\r Pression = \x1b[1m\x1b[K%.2f msw\n", pression);
POTLESS_2 9:04bfdfc029cb 129 printf("\n");
POTLESS_2 9:04bfdfc029cb 130 printf("\x1b[0m\r Temperature 1 = \x1b[1m\x1b[K%.2f C\n", Temp1);
POTLESS_2 9:04bfdfc029cb 131 printf("\x1b[0m\r Temperature 2 = \x1b[1m\x1b[K%.2f C\n", Temp2);
POTLESS_2 9:04bfdfc029cb 132 printf("\n");
POTLESS_2 9:04bfdfc029cb 133 printf("\x1b[0m\r Humidity = \x1b[1m\x1b[K%d %\n", Humid);
POTLESS_2 9:04bfdfc029cb 134 printf("\n");
POTLESS_2 8:a750d531b381 135 printf("\x1b[0m\r Cell O2 n 1 = \x1b[1m\x1b[K%d\n", CellO2_1);
POTLESS_2 8:a750d531b381 136 printf("\x1b[0m\r Cell O2 n 2 = \x1b[1m\x1b[K%d\n", CellO2_2);
POTLESS_2 8:a750d531b381 137 printf("\n");
POTLESS_2 9:04bfdfc029cb 138 printf("\x1b[0m\r Temps d execution de la boucle = \x1b[1m\x1b[K%f secondes\n", RATE);
POTLESS_2 9:04bfdfc029cb 139 printf("\r\n", "");
POTLESS_2 9:04bfdfc029cb 140 printf("\x1b[0m\r A enregistrer = \x1b[1m\x1b[K%s\n", to_store);
POTLESS_2 9:04bfdfc029cb 141 printf("\r\n", "");
POTLESS_2 8:a750d531b381 142 */
POTLESS_2 4:d84250f67dec 143 }
POTLESS_2 4:d84250f67dec 144
POTLESS_2 7:ad15c386e960 145 //Callback de l'intérruption des envois de commandes au Cozir
POTLESS_2 6:ebed9093d661 146 void callbackParam()
POTLESS_2 4:d84250f67dec 147 {
POTLESS_2 6:ebed9093d661 148 while(serialMonit.readable()) {
POTLESS_2 6:ebed9093d661 149 if (indexParam == sizeParam) //éviter la saturation du buffer
POTLESS_2 6:ebed9093d661 150 serialMonit.getc();
POTLESS_2 6:ebed9093d661 151 else
POTLESS_2 6:ebed9093d661 152 param [indexParam++] = serialMonit.getc();//chargement du buffer dans le message
POTLESS_2 6:ebed9093d661 153 if ((indexParam == sizeParam) || (param[indexParam -1] == '\n')) {//le message est complet ou nouvelle ligne ou autre si on veut...
POTLESS_2 6:ebed9093d661 154 param[indexParam] = 0;
POTLESS_2 6:ebed9093d661 155 newParamFlag = true;
POTLESS_2 6:ebed9093d661 156 }
POTLESS_2 4:d84250f67dec 157 }
POTLESS_2 6:ebed9093d661 158 }
POTLESS_2 4:d84250f67dec 159
POTLESS_2 9:04bfdfc029cb 160
POTLESS_2 9:04bfdfc029cb 161 //Callback de l'intérruption des envois de commandes depuis Android
POTLESS_2 9:04bfdfc029cb 162 void callbackAndroid()
POTLESS_2 9:04bfdfc029cb 163 {
POTLESS_2 9:04bfdfc029cb 164 while(android.readable()) {
POTLESS_2 9:04bfdfc029cb 165 if (indexAndroid == sizeAndroid) //éviter la saturation du buffer
POTLESS_2 9:04bfdfc029cb 166 android.getc();
POTLESS_2 9:04bfdfc029cb 167 else
POTLESS_2 9:04bfdfc029cb 168 Android [indexAndroid++] = android.getc();//chargement du buffer dans le message
POTLESS_2 9:04bfdfc029cb 169 if ((indexAndroid == sizeAndroid) || (Android[indexAndroid -1] == '\n')) {//le message est complet ou nouvelle ligne ou autre si on veut...
POTLESS_2 9:04bfdfc029cb 170 Android[indexAndroid] = 0;
POTLESS_2 9:04bfdfc029cb 171 newAndroidFlag = true;
POTLESS_2 9:04bfdfc029cb 172 }
POTLESS_2 9:04bfdfc029cb 173 }
POTLESS_2 9:04bfdfc029cb 174 }
POTLESS_2 9:04bfdfc029cb 175 void Decoding_Message(char message [])
POTLESS_2 9:04bfdfc029cb 176 {
POTLESS_2 9:04bfdfc029cb 177 char *commande = 0;
POTLESS_2 9:04bfdfc029cb 178 int valeur = 0;
POTLESS_2 9:04bfdfc029cb 179
POTLESS_2 9:04bfdfc029cb 180 sscanf(message,"%s %d",&commande , &valeur);
POTLESS_2 9:04bfdfc029cb 181
POTLESS_2 9:04bfdfc029cb 182 if ((char)commande == 'T') {
POTLESS_2 9:04bfdfc029cb 183 set_time(valeur);
POTLESS_2 9:04bfdfc029cb 184 } else {
POTLESS_2 9:04bfdfc029cb 185 sensors.cozirSend(message);
POTLESS_2 9:04bfdfc029cb 186 }
POTLESS_2 9:04bfdfc029cb 187
POTLESS_2 9:04bfdfc029cb 188 //wait_ms(500);
POTLESS_2 9:04bfdfc029cb 189 strcpy(param," ");
POTLESS_2 9:04bfdfc029cb 190 indexParam = 0;
POTLESS_2 9:04bfdfc029cb 191 newParamFlag = false;
POTLESS_2 9:04bfdfc029cb 192 }
POTLESS_2 9:04bfdfc029cb 193
POTLESS_2 9:04bfdfc029cb 194 void Decoding_Message_Android(char message [])
POTLESS_2 9:04bfdfc029cb 195 {
POTLESS_2 9:04bfdfc029cb 196 char *commande = 0;
POTLESS_2 9:04bfdfc029cb 197 int valeur = 0;
POTLESS_2 9:04bfdfc029cb 198
POTLESS_2 9:04bfdfc029cb 199 sscanf(message,"%s %d",&commande , &valeur);
POTLESS_2 9:04bfdfc029cb 200
POTLESS_2 9:04bfdfc029cb 201 if ((char)commande == 'T') {
POTLESS_2 9:04bfdfc029cb 202 set_time(valeur);
POTLESS_2 9:04bfdfc029cb 203 } else if ((char)commande == 'R') {
POTLESS_2 9:04bfdfc029cb 204 NVIC_SystemReset();
POTLESS_2 9:04bfdfc029cb 205 }
POTLESS_2 9:04bfdfc029cb 206
POTLESS_2 9:04bfdfc029cb 207 //wait_ms(500);
POTLESS_2 9:04bfdfc029cb 208 strcpy(Android," ");
POTLESS_2 9:04bfdfc029cb 209 indexAndroid = 0;
POTLESS_2 9:04bfdfc029cb 210 newAndroidFlag = false;
POTLESS_2 9:04bfdfc029cb 211 }
POTLESS_2 9:04bfdfc029cb 212
POTLESS_2 4:d84250f67dec 213 int main()
POTLESS_2 4:d84250f67dec 214 {
POTLESS_2 9:04bfdfc029cb 215 //UNIX TIMESTAMP depuis le erminal MAC = date +%s + 7200 pour heure d'été.....
POTLESS_2 9:04bfdfc029cb 216
POTLESS_2 9:04bfdfc029cb 217 sensors.Sensors_INIT(false, true, 5, SPOOLING, DIGI_FILTER32, CALIB_AIR);
POTLESS_2 6:ebed9093d661 218
POTLESS_2 6:ebed9093d661 219 serialMonit.attach(&callbackParam, Serial::RxIrq);
POTLESS_2 6:ebed9093d661 220
POTLESS_2 9:04bfdfc029cb 221 android.attach(&callbackAndroid, Serial::RxIrq);
POTLESS_2 9:04bfdfc029cb 222
POTLESS_2 7:ad15c386e960 223 serialMonit.printf(" Demarrage...\r\n\r\n Entrez les comandes COZIR si besoin :\r\n");
POTLESS_2 6:ebed9093d661 224
POTLESS_2 7:ad15c386e960 225 thread.start(Sensors_thread);
POTLESS_2 9:04bfdfc029cb 226
POTLESS_2 7:ad15c386e960 227 thread.set_priority(osPriorityRealtime);
POTLESS_2 9:04bfdfc029cb 228
POTLESS_2 8:a750d531b381 229 printf(CLS);
POTLESS_2 9:04bfdfc029cb 230
POTLESS_2 7:ad15c386e960 231 while (true) {
POTLESS_2 6:ebed9093d661 232
POTLESS_2 7:ad15c386e960 233 //Démarrage du Timer mesurant le temps d'éxecution du code
POTLESS_2 7:ad15c386e960 234 REAL_RATE.start();
POTLESS_2 7:ad15c386e960 235
POTLESS_2 7:ad15c386e960 236 Affichage_moniteur();
POTLESS_2 9:04bfdfc029cb 237
POTLESS_2 6:ebed9093d661 238 if (newParamFlag) {
POTLESS_2 6:ebed9093d661 239 wait_ms(500);
POTLESS_2 6:ebed9093d661 240 serialMonit.printf("Param = %s\r\n", param);
POTLESS_2 9:04bfdfc029cb 241 Decoding_Message(param);
POTLESS_2 9:04bfdfc029cb 242 }
POTLESS_2 9:04bfdfc029cb 243
POTLESS_2 9:04bfdfc029cb 244 if (newAndroidFlag) {
POTLESS_2 6:ebed9093d661 245 wait_ms(500);
POTLESS_2 9:04bfdfc029cb 246 serialMonit.printf("Android = %s\r\n", Android);
POTLESS_2 9:04bfdfc029cb 247 Decoding_Message_Android(Android);
POTLESS_2 6:ebed9093d661 248 }
POTLESS_2 7:ad15c386e960 249
POTLESS_2 9:04bfdfc029cb 250 //Vers Android
POTLESS_2 9:04bfdfc029cb 251 if (NEED_ANDROID_OUTPUT == 1) {
POTLESS_2 9:04bfdfc029cb 252 ANDROID(to_store);
POTLESS_2 9:04bfdfc029cb 253 //build_send_Message_int("t", co2, ppO2);
POTLESS_2 9:04bfdfc029cb 254 //build_send_Message_float("v", Temp1, pression);
POTLESS_2 9:04bfdfc029cb 255 //build_send_Message_int("m", CellO2_1, CellO2_2);
POTLESS_2 9:04bfdfc029cb 256 }
POTLESS_2 9:04bfdfc029cb 257
POTLESS_2 9:04bfdfc029cb 258 wait_ms(500);
POTLESS_2 9:04bfdfc029cb 259
POTLESS_2 9:04bfdfc029cb 260 sensors.Write_SD((string)to_store);
POTLESS_2 9:04bfdfc029cb 261
POTLESS_2 7:ad15c386e960 262 //Arrêt du Timer mesurant le temps d'éxecution du code
POTLESS_2 7:ad15c386e960 263 REAL_RATE.stop();
POTLESS_2 7:ad15c386e960 264 //Définition de la nouvelle valeur du temps d'échantillonage du PID.
POTLESS_2 7:ad15c386e960 265 RATE = REAL_RATE.read();
POTLESS_2 7:ad15c386e960 266 //Reset du Timer
POTLESS_2 7:ad15c386e960 267 REAL_RATE.reset();
POTLESS_2 9:04bfdfc029cb 268
POTLESS_2 4:d84250f67dec 269 }
POTLESS_2 4:d84250f67dec 270 }