mbed-os github
Dependencies: ADS1015 Faulhaber HTU21D_mod MS5837_potless Sensor_Head_RevB_3 USBDevice_dfu Utilsdfu beep
Fork of ARNSRS_testDFU by
Diff: main.cpp
- Revision:
- 9:04bfdfc029cb
- Parent:
- 8:a750d531b381
- Child:
- 10:aca745a66d51
diff -r a750d531b381 -r 04bfdfc029cb main.cpp --- a/main.cpp Wed Sep 27 08:02:47 2017 +0000 +++ b/main.cpp Tue Oct 03 15:55:23 2017 +0000 @@ -3,22 +3,41 @@ #include "Sensor_head_revB.h" #include "HTU21D.h" + +//Ecrit dans le moniteur série de la tablette à 9600 bds si sur 1, penser à mettre NEED_CONSOLE_OUTPUT à 0 +#define NEED_ANDROID_OUTPUT 1 + + +#if NEED_ANDROID_OUTPUT +#define ANDROID(...) { android.printf(__VA_ARGS__); } +#else +#define ANDROID(...) +#endif + //Moniteur série -Serial serialMonit (USBTX,USBRX,9600); +Serial serialMonit(USBTX,USBRX,9600); +//COM Série vers Android, Serial 3 +Serial android(PC_10,PC_11,9600); //Init de la lib ARNSRS; SENSOR_HEAD_REV_B sensors; //pour Param Cozir -const int sizeParam = 6; +const int sizeParam = 20; char param[sizeParam ]; int indexParam; bool newParamFlag = false; +//pour Commandes Android +const int sizeAndroid = 20; +char Android[sizeParam ]; +int indexAndroid; +bool newAndroidFlag = false; + //Variables de stockage des infos capteurs int co2 = 0; float pression = 0; -float Temp = 0; +float Temp1 = 0; int ppO2 = 0; int CellO2_1 = 0; int CellO2_2 = 0; @@ -29,10 +48,12 @@ //HTU21D HTU21D temphumid(PB_9, PB_8); //Temp humid sensor || SDA, SCL -int sample_ftemp; -float sample_ctemp; -int sample_ktemp; -int sample_humid; +float Temp2; +int Humid; + +//Data LOG +char to_store[50]; +time_t seconds; //VT100 static const char CLS[] = "\x1B[2J"; @@ -49,49 +70,75 @@ co2 = sensors.requestCO2(); //P / T sur MS5837 pression = sensors.requestPress(); - Temp = sensors.requestTemp(); + Temp1 = sensors.requestTemp(); //PPO2 sur ADS1015 ppO2 = sensors.requestPpO2(); //Cell O2 en mV CellO2_1 = sensors.requestCellO2_1(); CellO2_2 = sensors.requestCellO2_2(); - + //HTU21D - //sample_ftemp = temphumid.sample_ftemp(); - sample_ctemp = temphumid.sample_ctemp(); - //sample_ktemp = temphumid.sample_ktemp(); - sample_humid = temphumid.sample_humid(); + Temp2 = temphumid.sample_ctemp(); + Humid = temphumid.sample_humid(); + + //Fabrication de la chaine Date / heure + seconds = time(NULL); + char Time_buf[32]; + strftime(Time_buf, 32, "%D %I-%M-%S ", localtime(&seconds)); + + //Fabrication de la chaine à enregistrer + sprintf(to_store,"<%s:%d:%d:%.2f:%.2f:%.2f:%d:%d:%d>", + Time_buf, + co2, + ppO2, + pression, + Temp1, + Temp2, + Humid, + CellO2_1, + CellO2_2); } } void Affichage_moniteur() { - - printf(" CO2 = %d\r\n" , co2); - printf(" PPO2 = %d\r\n", ppO2); - printf(" Pression = %f\r\n", pression); - printf(" Temperature 1 = %f\r\n", Temp); - printf(" Temperature 2 = %f C\n\r", sample_ctemp); - printf(" Humidity = %d %%\n\r", sample_humid); + printf("\r\n"); + printf(" CO2 = %d ppm\r\n" , co2); + printf(" PPO2 = %d mb\r\n", ppO2); + printf(" Pression = %f msw\r\n", pression); + printf(" Temperature 1 = %f C\r\n", Temp1); + printf(" Temperature 2 = %f C\n\r", Temp2); + printf(" Humidity = %d %%\n\r", Humid); printf("\n\r"); printf(" Cell O2 n 1 = %d\r\n" , CellO2_1); printf(" Cell O2 n 2 = %d\r\n" , CellO2_2); printf("\r\n"); - - //printf("Temperature: %d F\n\r", sample_ftemp); - //printf("Temperature: %d K\n\r", sample_ktemp); - - + printf("\n"); + printf("Temps d execution de la boucle = %f secondes\n", RATE); + printf("\r\n", ""); + printf("A enregistrer = %s\n", to_store); + printf("\r\n"); + /* printf(HOME); printf("\x1b[30m"); - printf("\x1b[0m\r CO2 = \x1b[1m\x1b[K%d\n", co2); - printf("\x1b[0m\r Pression = \x1b[1m\x1b[K%f\n", pression); - printf("\x1b[0m\r Temperature = \x1b[1m\x1b[K%f\n", Temp); - printf("\x1b[0m\r PPO2 = \x1b[1m\x1b[K%d\n", ppO2); + printf("\x1b[0m\r CO2 = \x1b[1m\x1b[K%d ppm\n", co2); + printf("\x1b[0m\r PPO2 = \x1b[1m\x1b[K%d mb\n", ppO2); + printf("\n"); + printf("\x1b[0m\r Pression = \x1b[1m\x1b[K%.2f msw\n", pression); + printf("\n"); + printf("\x1b[0m\r Temperature 1 = \x1b[1m\x1b[K%.2f C\n", Temp1); + printf("\x1b[0m\r Temperature 2 = \x1b[1m\x1b[K%.2f C\n", Temp2); + printf("\n"); + printf("\x1b[0m\r Humidity = \x1b[1m\x1b[K%d %\n", Humid); + printf("\n"); printf("\x1b[0m\r Cell O2 n 1 = \x1b[1m\x1b[K%d\n", CellO2_1); printf("\x1b[0m\r Cell O2 n 2 = \x1b[1m\x1b[K%d\n", CellO2_2); printf("\n"); + printf("\x1b[0m\r Temps d execution de la boucle = \x1b[1m\x1b[K%f secondes\n", RATE); + printf("\r\n", ""); + printf("\x1b[0m\r A enregistrer = \x1b[1m\x1b[K%s\n", to_store); + printf("\r\n", ""); */ } @@ -110,49 +157,114 @@ } } + +//Callback de l'intérruption des envois de commandes depuis Android +void callbackAndroid() +{ + while(android.readable()) { + if (indexAndroid == sizeAndroid) //éviter la saturation du buffer + android.getc(); + else + Android [indexAndroid++] = android.getc();//chargement du buffer dans le message + if ((indexAndroid == sizeAndroid) || (Android[indexAndroid -1] == '\n')) {//le message est complet ou nouvelle ligne ou autre si on veut... + Android[indexAndroid] = 0; + newAndroidFlag = true; + } + } +} +void Decoding_Message(char message []) +{ + char *commande = 0; + int valeur = 0; + + sscanf(message,"%s %d",&commande , &valeur); + + if ((char)commande == 'T') { + set_time(valeur); + } else { + sensors.cozirSend(message); + } + + //wait_ms(500); + strcpy(param," "); + indexParam = 0; + newParamFlag = false; +} + +void Decoding_Message_Android(char message []) +{ + char *commande = 0; + int valeur = 0; + + sscanf(message,"%s %d",&commande , &valeur); + + if ((char)commande == 'T') { + set_time(valeur); + } else if ((char)commande == 'R') { + NVIC_SystemReset(); + } + + //wait_ms(500); + strcpy(Android," "); + indexAndroid = 0; + newAndroidFlag = false; +} + int main() { - set_time(1256729737); - - sensors.Sensors_INIT(false, false, 5, SPOOLING, DIGI_FILTER32, CALIB_AIR); + //UNIX TIMESTAMP depuis le erminal MAC = date +%s + 7200 pour heure d'été..... + + sensors.Sensors_INIT(false, true, 5, SPOOLING, DIGI_FILTER32, CALIB_AIR); serialMonit.attach(&callbackParam, Serial::RxIrq); + android.attach(&callbackAndroid, Serial::RxIrq); + serialMonit.printf(" Demarrage...\r\n\r\n Entrez les comandes COZIR si besoin :\r\n"); thread.start(Sensors_thread); - + thread.set_priority(osPriorityRealtime); - + printf(CLS); - + while (true) { //Démarrage du Timer mesurant le temps d'éxecution du code REAL_RATE.start(); Affichage_moniteur(); - + if (newParamFlag) { wait_ms(500); serialMonit.printf("Param = %s\r\n", param); - sensors.cozirSend(param); + Decoding_Message(param); + } + + if (newAndroidFlag) { wait_ms(500); - strcpy(param," "); - indexParam = 0; - newParamFlag = false; + serialMonit.printf("Android = %s\r\n", Android); + Decoding_Message_Android(Android); } - wait(1); - + //Vers Android + if (NEED_ANDROID_OUTPUT == 1) { + ANDROID(to_store); + //build_send_Message_int("t", co2, ppO2); + //build_send_Message_float("v", Temp1, pression); + //build_send_Message_int("m", CellO2_1, CellO2_2); + } + + wait_ms(500); + + sensors.Write_SD((string)to_store); + //Arrêt du Timer mesurant le temps d'éxecution du code REAL_RATE.stop(); //Définition de la nouvelle valeur du temps d'échantillonage du PID. RATE = REAL_RATE.read(); //Reset du Timer REAL_RATE.reset(); - printf("\r\n Temps d execution de la boucle = %f\r\n", RATE); - printf("\r\n", ""); - + } }