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
Diff: main.cpp
- Revision:
- 14:e6686a44db84
- Parent:
- 13:aa620707126d
- Child:
- 15:c9205e490740
--- a/main.cpp Mon May 08 13:15:35 2017 +0000 +++ b/main.cpp Mon May 08 16:01:53 2017 +0000 @@ -15,12 +15,12 @@ #include "SDFileSystem.h" #include "ARNSRS_SENSORS.h" #include "ble/BLE.h" - + #include "ble/services/UARTService.h" #include <string> //Ecrit dans le moniteur série de l'ordi à 9600 bds -#define DEBUG(...) { printf(__VA_ARGS__); } +#define DEBUG(...) { serialMonit.printf(__VA_ARGS__); } //Init BLE BLEDevice ble; @@ -33,7 +33,7 @@ bool FLAG_SIMPLE_TIME = false; //COM Série vers l'ordi, Serial 2 par défaut -Serial serialMonit (USBTX,USBRX); +Serial serialMonit (USBTX,USBRX); //Variable des capteurs int co2 = 0; @@ -52,16 +52,19 @@ int points = 1; //Fonction pour créer et envoyer la chaine d'in en BLE -void build_send_Message(int co2, int ppo2, float press){ - char buf[50]; - sprintf(buf,"%d %d %f\r\n", ppo2, co2, press); - uartServicePtr->writeString(buf); - } +//On balance tout en float, même pour des int...Qu peut le plus peut le moins... +//3 par 3 ça passe juste avec un décimal....Sinon faire deux par deux ??? +void build_send_Message(string com, float A, float B, float C) +{ + char buf[50]; + sprintf(buf,"%s %.1f %.1f %.1f\r\n", com, A, B, C); + uartServicePtr->writeString(buf); +} void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params) { - DEBUG("Disconnected!\n\r"); - DEBUG("Restarting the advertising process\n\r"); + //DEBUG("Disconnected!\n\r"); + //DEBUG("Restarting the advertising process\n\r"); ble.startAdvertising(); } @@ -69,29 +72,70 @@ { if ((uartServicePtr != NULL) && (params->handle == uartServicePtr->getTXCharacteristicHandle())) { uint16_t bytesRead = params->len; - - // chaine reçue de l'app android (à dimensionner selon besoin) - char commande [bytesRead] ; - + /* + // les chaines de réponse + /uint8_t press_mb_ToSend[14]; + uint8_t co2_ppm_ToSend[14]; + uint8_t o2_mb_ToSend[14]; + + // fabrication des chaines de réponse + // on suppose que chaque donnee peut être représentée par 5 digits + char s_press_mb [50]; + sprintf(s_press_mb,"PRESS %i mb ",press_mb); // mef ! laisser les espaces de la fin + + char s_co2_ppm [50]; + sprintf(s_co2_ppm,"CO2 %i ppm ",co2_ppm); + + char s_o2_mb [50]; + sprintf(s_o2_mb,"O2 %i mb ",o2_mb); + + // convertir les chaines en uint8_t + for(int j=0;j<sizeof(s_press_mb);j++){ // hypothèse : les chaines press, co2, o2 ont la même longeur + press_mb_ToSend[j]=s_press_mb[j]; + co2_ppm_ToSend[j]=s_co2_ppm[j]; + o2_mb_ToSend[j]=s_o2_mb[j]; + } + */ + // chaine reçue de l'app android (à dimensionner selon besoin) + char commande [bytesRead] ; + // conversion de la commande uint8_t en chaine pour permettre comparaison avec commandes connues - for (int j=0;j<bytesRead;j++) { - commande [j] = (*((params->data)+j)); + for (int j=0; j<bytesRead; j++) { + commande [j] = (*((params->data)+j)); } - + +/* DEBUG("received %u bytes => ", bytesRead); DEBUG("commande recue -%s-\r\n",commande); DEBUG ( "comparaison a commande 'p' vaut %d\r\n",strcmp(commande, "p")); DEBUG ( "comparaison a commande 'o' vaut %d\r\n",strcmp(commande, "o")); DEBUG ( "comparaison a commande 'c' vaut %d\r\n",strcmp(commande, "c")); - - - DEBUG("Tous les capteurs = %d %d %d\r\n", ppO2, co2, pression); - build_send_Message(ppO2, co2, pression); - - } - + DEBUG ( "comparaison a commande 't' vaut %d\r\n",strcmp(commande, "t")); + DEBUG ( "comparaison a commande 'u' vaut %d\r\n",strcmp(commande, "t")); + + // envoi des réponses en fonction de la commande recue + if (strcmp(commande, "p") == 0) { + DEBUG("s_press_mb %s +++> data to send %s \r\n",s_press_mb,press_mb_ToSend); + ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), press_mb_ToSend, sizeof(press_mb_ToSend)); + } + if (strcmp(commande, "c") == 0) { + DEBUG("s_co2_ppm %s +++> data to send %s \r\n",s_co2_ppm,co2_ppm_ToSend); + ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), co2_ppm_ToSend, sizeof(co2_ppm_ToSend)); + } + if (strcmp(commande, "o") == 0) { + DEBUG("s_o2_mb %s +++> data to send %s \r\n",s_o2_mb,o2_mb_ToSend); + ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), o2_mb_ToSend, sizeof(o2_mb_ToSend)); + } + else */ + if (strcmp(commande, "t") == 0) { + build_send_Message("t", ppO2, co2, pression); + }else + if (strcmp(commande, "u") == 0) { + build_send_Message("u", Temp1, Temp2, Humi); + } + } } - + //Fonction qui change le nom du fichier ouvert pour le LOG FILE *nextLogFile(void) { @@ -105,46 +149,49 @@ } while (filePtr != NULL); return fopen( fileName,"w"); } -void SetTime() { - //Reglage date / heure depuis le terminal +void SetTime() +{ + //Reglage date / heure depuis le terminal struct tm t; - printf("Entrer la date et l'heure :\n"); - printf("YYYY MM DD HH MM SS [enter]\n"); + DEBUG("Entrer la date et l'heure :\n"); + DEBUG("YYYY MM DD HH MM SS [enter]\n"); scanf("%d %d %d %d %d %d", &t.tm_year, &t.tm_mon, &t.tm_mday - , &t.tm_hour, &t.tm_min, &t.tm_sec); + , &t.tm_hour, &t.tm_min, &t.tm_sec); t.tm_year = t.tm_year - 1900; t.tm_mon = t.tm_mon - 1; - + // set the time - set_time(mktime(&t)); + set_time(mktime(&t)); } -void init_DATALOG(){ +void init_DATALOG() +{ //Initialisation DATA LOG - serialMonit.printf("Initialisation SD card\r\n"); + DEBUG("Initialisation SD card\r\n"); fp = nextLogFile(); - - if (!fp) { - serialMonit.printf("Probleme SD card...Fin du programme...\r\n"); - //exit(0); - }else{ - serialMonit.printf("Nouveau fichier LOG cree = %s\r\n", fileName); - serialMonit.printf("\r\n", ""); - } + + if (!fp) { + DEBUG("Probleme SD card...Fin du programme...\r\n"); + //exit(0); + } else { + DEBUG("Nouveau fichier LOG cree = %s\r\n", fileName); + DEBUG("\r\n", ""); } - -void DATA_LOG(){ +} + +void DATA_LOG() +{ time_t seconds = time(NULL); if (fp) { - fprintf(fp, "%s,%d,%d,%f,%f,%f,%f\r\n", ctime(&seconds), co2 , ppO2, pression, Temp1, Temp2, Humi); - serialMonit.printf(" Enregistrement d'un point sur la carte SD\r\n"); - serialMonit.printf(" Nombre de points = %d\r\n", points); - serialMonit.printf("\r\n", ""); - points++; - }else{ - serialMonit.printf(" Probleme carte SD\r\n"); - } - } + fprintf(fp, "%s,%d,%d,%f,%f,%f,%f\r\n", ctime(&seconds), co2 , ppO2, pression, Temp1, Temp2, Humi); + DEBUG(" Enregistrement d'un point sur la carte SD\r\n"); + DEBUG(" Nombre de points = %d\r\n", points); + DEBUG("\r\n", ""); + points++; + } else { + DEBUG(" Probleme carte SD\r\n"); + } +} /////////////////////////////////// // fonction initialisation ///// /////////////////////////////////// @@ -152,9 +199,9 @@ { //Réglage de l'heure SetTime(); - + init_DATALOG(); - + //Initialisation capteurs arnsrs.Sensors_INIT(false, 5, SPOOLING, DIGI_FILTER32, CALIB_AIR); } @@ -167,11 +214,11 @@ { setup(); -DEBUG("Initialising....\n\r"); + //DEBUG("Initialising....\n\r"); ble.init(); ble.onDisconnection(disconnectionCallback); ble.onDataWritten(onDataWritten); - + /* setup advertising */ ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED); ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); @@ -179,32 +226,30 @@ (const uint8_t *)"BLE UART", sizeof("BLE UART") - 1); ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS, (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed)); - + ble.setAdvertisingInterval(1000); /* 1000ms; in multiples of 0.625ms. */ ble.startAdvertising(); - + UARTService uartService(ble); uartServicePtr = &uartService; - - while (true) { - - ble.waitForEvent(); - - + + while (1) { - wait(2); - + ble.waitForEvent(); + + wait_ms(500); + //RTC time_t seconds = time(NULL); - - printf(" Date / Heure = %s\r\n", ctime(&seconds)); - + + DEBUG(" Date / Heure = %s\r\n", ctime(&seconds)); + //CO2 / H / T sur Cozir co2 = arnsrs.requestCO2(); Humi = arnsrs.requestHUMI(); - Temp1 = arnsrs.requestTEMP(); - + Temp1 = arnsrs.requestTEMP(); + //P / T sur MS5803_14BA pression = arnsrs.requestPress(); Temp2 = arnsrs.requestTemp(); @@ -213,20 +258,18 @@ ppO2 = arnsrs.requestPpO2(false); //Affichage sur moniteur série - serialMonit.printf(" CO2 = %d\r\n" , co2); - serialMonit.printf(" Humidité = %f\r\n" , Humi); - serialMonit.printf(" Température = %f\r\n" ,Temp1); + DEBUG(" CO2 = %d\r\n" , co2); + DEBUG(" Humidité = %f\r\n" , Humi); + DEBUG(" Température = %f\r\n" ,Temp1); //P / T sur MS5803 - serialMonit.printf(" Pression = %f\r\n", pression); - serialMonit.printf(" Température = %f\r\n", Temp2); + DEBUG(" Pression = %f\r\n", pression); + DEBUG(" Température = %f\r\n", Temp2); //PPO2 sur ADS1015 - serialMonit.printf(" PPO2 = %d\r\n", ppO2); - serialMonit.printf("\r\n", ""); + DEBUG(" PPO2 = %d\r\n", ppO2); + DEBUG("\r\n", ""); //Data LOG DATA_LOG(); - - } - + } }