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
main.cpp
- Committer:
- POTLESS_2
- Date:
- 2017-05-08
- Revision:
- 13:aa620707126d
- Parent:
- 12:9ac5be447764
- Child:
- 14:e6686a44db84
File content as of revision 13:aa620707126d:
/* procédure lecture capteur COZIR ou MINIR - CO2 seul sur broches F401RE SERIAL PA_11 et PA_12 renvoie sur moniteur (IDE arduino par exemple) de la valeur lue procédures possibles sont : request (char commande) - renvoie la valeur lue si la commande ne représente qu'un seul caractère (entre '') cozirSend (string commande) - permet d'envoyer des commandes multicaractères (entre "") - exemple A 32 - donne la réponse obtenue la fonction cozirSend est davantage "sécurisée" */ #include "mbed.h" #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__); } //Init BLE BLEDevice ble; UARTService *uartServicePtr; //Init de la lib ARNSRS; ARNSRS arnsrs; //Quelque FLAG... bool FLAG_SIMPLE_TIME = false; //COM Série vers l'ordi, Serial 2 par défaut Serial serialMonit (USBTX,USBRX); //Variable des capteurs int co2 = 0; int ppO2 = 0; float pression = 0; float Temp1 = 0; float Temp2 = 0; float Humi = 0; string DateHeure; //SD card SDFileSystem sd(D11, D12, D13, D10, "sd"); // MOSI, MISO, SCK, CS FILE *fp; char fileName[32]; 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); } void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params) { DEBUG("Disconnected!\n\r"); DEBUG("Restarting the advertising process\n\r"); ble.startAdvertising(); } void onDataWritten(const GattWriteCallbackParams *params) { 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] ; // 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)); } 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); } } //Fonction qui change le nom du fichier ouvert pour le LOG FILE *nextLogFile(void) { static unsigned int fileNumber = 0; FILE *filePtr = NULL; do { if (filePtr != NULL) fclose(filePtr); sprintf(fileName,"/sd/LOG_Capteurs_%04u.txt",fileNumber++); filePtr = fopen(fileName,"r"); } while (filePtr != NULL); return fopen( fileName,"w"); } 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"); 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_year = t.tm_year - 1900; t.tm_mon = t.tm_mon - 1; // set the time set_time(mktime(&t)); } void init_DATALOG(){ //Initialisation DATA LOG serialMonit.printf("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", ""); } } 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"); } } /////////////////////////////////// // fonction initialisation ///// /////////////////////////////////// void setup() { //Réglage de l'heure SetTime(); init_DATALOG(); //Initialisation capteurs arnsrs.Sensors_INIT(false, 5, SPOOLING, DIGI_FILTER32, CALIB_AIR); } ///////////////////////////////////// /// procédure principale ///////// ///////////////////////////////////// int main() { setup(); 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); ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME, (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); //RTC time_t seconds = time(NULL); printf(" Date / Heure = %s\r\n", ctime(&seconds)); //CO2 / H / T sur Cozir co2 = arnsrs.requestCO2(); Humi = arnsrs.requestHUMI(); Temp1 = arnsrs.requestTEMP(); //P / T sur MS5803_14BA pression = arnsrs.requestPress(); Temp2 = arnsrs.requestTemp(); //PPO2 sur ADS1015 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); //P / T sur MS5803 serialMonit.printf(" Pression = %f\r\n", pression); serialMonit.printf(" Température = %f\r\n", Temp2); //PPO2 sur ADS1015 serialMonit.printf(" PPO2 = %d\r\n", ppO2); serialMonit.printf("\r\n", ""); //Data LOG DATA_LOG(); } } }