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@17:6e0c4c0e0fe2, 2017-05-10 (annotated)
- Committer:
- POTLESS_2
- Date:
- Wed May 10 08:54:18 2017 +0000
- Revision:
- 17:6e0c4c0e0fe2
- Parent:
- 16:fc7d8cc6bf4b
- Child:
- 18:e3827d5dbdd9
Update pour coller ? app android
Who changed what in which revision?
User | Revision | Line number | New 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_2 | 4:d84250f67dec | 11 | */ |
potless | 0:69d4b21d58e0 | 12 | |
potless | 0:69d4b21d58e0 | 13 | |
potless | 1:bef7856b5c0a | 14 | #include "mbed.h" |
POTLESS_2 | 5:e1d0dc7940a6 | 15 | #include "SDFileSystem.h" |
POTLESS_2 | 5:e1d0dc7940a6 | 16 | #include "ARNSRS_SENSORS.h" |
POTLESS_2 | 13:aa620707126d | 17 | #include "ble/BLE.h" |
POTLESS_2 | 14:e6686a44db84 | 18 | |
POTLESS_2 | 13:aa620707126d | 19 | #include "ble/services/UARTService.h" |
POTLESS_2 | 13:aa620707126d | 20 | #include <string> |
POTLESS_2 | 13:aa620707126d | 21 | |
POTLESS_2 | 15:c9205e490740 | 22 | //Ecrit dans le moniteur série de l'ordi à 9600 bds si sur 1 |
POTLESS_2 | 15:c9205e490740 | 23 | #define NEED_CONSOLE_OUTPUT 1 |
POTLESS_2 | 16:fc7d8cc6bf4b | 24 | //Pour utiliser le traceur du moniteur Arduino. Mettre NEED_CONSOLE_OUTPUT 0 si utilisé. |
POTLESS_2 | 16:fc7d8cc6bf4b | 25 | //En premier ouvrir le moniteur série pour régler la RTC, puis fermer et ouvrir le traceur série |
POTLESS_2 | 15:c9205e490740 | 26 | #define NEED_GRAPH_OUTPUT 0 |
POTLESS_2 | 15:c9205e490740 | 27 | //Datalog carte SD si sur 1 |
POTLESS_2 | 16:fc7d8cc6bf4b | 28 | #define NEED_SD_DATA_LOG 0 |
POTLESS_2 | 15:c9205e490740 | 29 | |
POTLESS_2 | 15:c9205e490740 | 30 | #if NEED_CONSOLE_OUTPUT |
POTLESS_2 | 14:e6686a44db84 | 31 | #define DEBUG(...) { serialMonit.printf(__VA_ARGS__); } |
POTLESS_2 | 15:c9205e490740 | 32 | #else |
POTLESS_2 | 15:c9205e490740 | 33 | #define DEBUG(...) |
POTLESS_2 | 15:c9205e490740 | 34 | #endif |
POTLESS_2 | 15:c9205e490740 | 35 | |
POTLESS_2 | 15:c9205e490740 | 36 | #if NEED_GRAPH_OUTPUT |
POTLESS_2 | 15:c9205e490740 | 37 | #define TRACE(...) { serialMonit.printf(__VA_ARGS__); } |
POTLESS_2 | 15:c9205e490740 | 38 | #else |
POTLESS_2 | 15:c9205e490740 | 39 | #define TRACE(...) |
POTLESS_2 | 15:c9205e490740 | 40 | #endif |
POTLESS_2 | 13:aa620707126d | 41 | |
POTLESS_2 | 13:aa620707126d | 42 | //Init BLE |
POTLESS_2 | 13:aa620707126d | 43 | BLEDevice ble; |
POTLESS_2 | 13:aa620707126d | 44 | UARTService *uartServicePtr; |
POTLESS_2 | 5:e1d0dc7940a6 | 45 | |
POTLESS_2 | 5:e1d0dc7940a6 | 46 | //Init de la lib ARNSRS; |
POTLESS_2 | 5:e1d0dc7940a6 | 47 | ARNSRS arnsrs; |
POTLESS_2 | 5:e1d0dc7940a6 | 48 | |
POTLESS_2 | 5:e1d0dc7940a6 | 49 | //Quelque FLAG... |
POTLESS_2 | 5:e1d0dc7940a6 | 50 | bool FLAG_SIMPLE_TIME = false; |
potless | 1:bef7856b5c0a | 51 | |
POTLESS_2 | 9:d945fa4be3a5 | 52 | //COM Série vers l'ordi, Serial 2 par défaut |
POTLESS_2 | 14:e6686a44db84 | 53 | Serial serialMonit (USBTX,USBRX); |
potless | 2:4a8bf1d53439 | 54 | |
POTLESS_2 | 5:e1d0dc7940a6 | 55 | //Variable des capteurs |
POTLESS_2 | 12:9ac5be447764 | 56 | int co2 = 0; |
POTLESS_2 | 12:9ac5be447764 | 57 | int ppO2 = 0; |
POTLESS_2 | 12:9ac5be447764 | 58 | float pression = 0; |
POTLESS_2 | 12:9ac5be447764 | 59 | float Temp1 = 0; |
POTLESS_2 | 12:9ac5be447764 | 60 | float Temp2 = 0; |
POTLESS_2 | 12:9ac5be447764 | 61 | float Humi = 0; |
POTLESS_2 | 12:9ac5be447764 | 62 | |
POTLESS_2 | 15:c9205e490740 | 63 | //Pour stocker le format date / heure |
POTLESS_2 | 5:e1d0dc7940a6 | 64 | string DateHeure; |
potless | 2:4a8bf1d53439 | 65 | |
POTLESS_2 | 6:1c2212891714 | 66 | //SD card |
POTLESS_2 | 6:1c2212891714 | 67 | SDFileSystem sd(D11, D12, D13, D10, "sd"); // MOSI, MISO, SCK, CS |
POTLESS_2 | 6:1c2212891714 | 68 | FILE *fp; |
POTLESS_2 | 7:c5a5d8f678ff | 69 | char fileName[32]; |
POTLESS_2 | 7:c5a5d8f678ff | 70 | int points = 1; |
POTLESS_2 | 4:d84250f67dec | 71 | |
POTLESS_2 | 15:c9205e490740 | 72 | |
POTLESS_2 | 15:c9205e490740 | 73 | //Fonction pour créer et envoyer la chaine d'infos en BLE |
POTLESS_2 | 15:c9205e490740 | 74 | //On balance tout en float, même pour des int...Qui peut le plus peut le moins... |
POTLESS_2 | 17:6e0c4c0e0fe2 | 75 | //deux par deux, methode pour de int et methode pour des float |
POTLESS_2 | 17:6e0c4c0e0fe2 | 76 | void build_send_Message_float(string com, float A, float B) |
POTLESS_2 | 14:e6686a44db84 | 77 | { |
POTLESS_2 | 14:e6686a44db84 | 78 | char buf[50]; |
POTLESS_2 | 17:6e0c4c0e0fe2 | 79 | sprintf(buf,"%s%.1f:%.1f\r\n", com.c_str(), A, B); |
POTLESS_2 | 14:e6686a44db84 | 80 | uartServicePtr->writeString(buf); |
POTLESS_2 | 17:6e0c4c0e0fe2 | 81 | wait_ms(100); |
POTLESS_2 | 17:6e0c4c0e0fe2 | 82 | } |
POTLESS_2 | 17:6e0c4c0e0fe2 | 83 | |
POTLESS_2 | 17:6e0c4c0e0fe2 | 84 | void build_send_Message_int(string com, int A, int B) |
POTLESS_2 | 17:6e0c4c0e0fe2 | 85 | { |
POTLESS_2 | 17:6e0c4c0e0fe2 | 86 | char buf[50]; |
POTLESS_2 | 17:6e0c4c0e0fe2 | 87 | sprintf(buf,"%s%d:%d\r\n", com.c_str(), A, B); |
POTLESS_2 | 17:6e0c4c0e0fe2 | 88 | uartServicePtr->writeString(buf); |
POTLESS_2 | 17:6e0c4c0e0fe2 | 89 | wait_ms(100); |
POTLESS_2 | 14:e6686a44db84 | 90 | } |
POTLESS_2 | 13:aa620707126d | 91 | |
POTLESS_2 | 13:aa620707126d | 92 | void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params) |
POTLESS_2 | 13:aa620707126d | 93 | { |
POTLESS_2 | 14:e6686a44db84 | 94 | //DEBUG("Disconnected!\n\r"); |
POTLESS_2 | 14:e6686a44db84 | 95 | //DEBUG("Restarting the advertising process\n\r"); |
POTLESS_2 | 13:aa620707126d | 96 | ble.startAdvertising(); |
POTLESS_2 | 13:aa620707126d | 97 | } |
POTLESS_2 | 13:aa620707126d | 98 | |
POTLESS_2 | 13:aa620707126d | 99 | void onDataWritten(const GattWriteCallbackParams *params) |
POTLESS_2 | 13:aa620707126d | 100 | { |
POTLESS_2 | 13:aa620707126d | 101 | if ((uartServicePtr != NULL) && (params->handle == uartServicePtr->getTXCharacteristicHandle())) { |
POTLESS_2 | 13:aa620707126d | 102 | uint16_t bytesRead = params->len; |
POTLESS_2 | 14:e6686a44db84 | 103 | /* |
POTLESS_2 | 14:e6686a44db84 | 104 | // les chaines de réponse |
POTLESS_2 | 15:c9205e490740 | 105 | uint8_t press_mb_ToSend[14]; |
POTLESS_2 | 14:e6686a44db84 | 106 | uint8_t co2_ppm_ToSend[14]; |
POTLESS_2 | 14:e6686a44db84 | 107 | uint8_t o2_mb_ToSend[14]; |
POTLESS_2 | 14:e6686a44db84 | 108 | |
POTLESS_2 | 14:e6686a44db84 | 109 | // fabrication des chaines de réponse |
POTLESS_2 | 14:e6686a44db84 | 110 | // on suppose que chaque donnee peut être représentée par 5 digits |
POTLESS_2 | 14:e6686a44db84 | 111 | char s_press_mb [50]; |
POTLESS_2 | 14:e6686a44db84 | 112 | sprintf(s_press_mb,"PRESS %i mb ",press_mb); // mef ! laisser les espaces de la fin |
POTLESS_2 | 14:e6686a44db84 | 113 | |
POTLESS_2 | 14:e6686a44db84 | 114 | char s_co2_ppm [50]; |
POTLESS_2 | 14:e6686a44db84 | 115 | sprintf(s_co2_ppm,"CO2 %i ppm ",co2_ppm); |
POTLESS_2 | 14:e6686a44db84 | 116 | |
POTLESS_2 | 14:e6686a44db84 | 117 | char s_o2_mb [50]; |
POTLESS_2 | 14:e6686a44db84 | 118 | sprintf(s_o2_mb,"O2 %i mb ",o2_mb); |
POTLESS_2 | 14:e6686a44db84 | 119 | |
POTLESS_2 | 14:e6686a44db84 | 120 | // convertir les chaines en uint8_t |
POTLESS_2 | 14:e6686a44db84 | 121 | for(int j=0;j<sizeof(s_press_mb);j++){ // hypothèse : les chaines press, co2, o2 ont la même longeur |
POTLESS_2 | 14:e6686a44db84 | 122 | press_mb_ToSend[j]=s_press_mb[j]; |
POTLESS_2 | 14:e6686a44db84 | 123 | co2_ppm_ToSend[j]=s_co2_ppm[j]; |
POTLESS_2 | 14:e6686a44db84 | 124 | o2_mb_ToSend[j]=s_o2_mb[j]; |
POTLESS_2 | 14:e6686a44db84 | 125 | } |
POTLESS_2 | 15:c9205e490740 | 126 | */ |
POTLESS_2 | 14:e6686a44db84 | 127 | // chaine reçue de l'app android (à dimensionner selon besoin) |
POTLESS_2 | 14:e6686a44db84 | 128 | char commande [bytesRead] ; |
POTLESS_2 | 14:e6686a44db84 | 129 | |
POTLESS_2 | 13:aa620707126d | 130 | // conversion de la commande uint8_t en chaine pour permettre comparaison avec commandes connues |
POTLESS_2 | 14:e6686a44db84 | 131 | for (int j=0; j<bytesRead; j++) { |
POTLESS_2 | 14:e6686a44db84 | 132 | commande [j] = (*((params->data)+j)); |
POTLESS_2 | 13:aa620707126d | 133 | } |
POTLESS_2 | 14:e6686a44db84 | 134 | /* |
POTLESS_2 | 13:aa620707126d | 135 | DEBUG("received %u bytes => ", bytesRead); |
POTLESS_2 | 13:aa620707126d | 136 | DEBUG("commande recue -%s-\r\n",commande); |
POTLESS_2 | 13:aa620707126d | 137 | DEBUG ( "comparaison a commande 'p' vaut %d\r\n",strcmp(commande, "p")); |
POTLESS_2 | 13:aa620707126d | 138 | DEBUG ( "comparaison a commande 'o' vaut %d\r\n",strcmp(commande, "o")); |
POTLESS_2 | 13:aa620707126d | 139 | DEBUG ( "comparaison a commande 'c' vaut %d\r\n",strcmp(commande, "c")); |
POTLESS_2 | 14:e6686a44db84 | 140 | DEBUG ( "comparaison a commande 't' vaut %d\r\n",strcmp(commande, "t")); |
POTLESS_2 | 14:e6686a44db84 | 141 | DEBUG ( "comparaison a commande 'u' vaut %d\r\n",strcmp(commande, "t")); |
POTLESS_2 | 14:e6686a44db84 | 142 | |
POTLESS_2 | 14:e6686a44db84 | 143 | // envoi des réponses en fonction de la commande recue |
POTLESS_2 | 14:e6686a44db84 | 144 | if (strcmp(commande, "p") == 0) { |
POTLESS_2 | 14:e6686a44db84 | 145 | DEBUG("s_press_mb %s +++> data to send %s \r\n",s_press_mb,press_mb_ToSend); |
POTLESS_2 | 14:e6686a44db84 | 146 | ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), press_mb_ToSend, sizeof(press_mb_ToSend)); |
POTLESS_2 | 14:e6686a44db84 | 147 | } |
POTLESS_2 | 14:e6686a44db84 | 148 | if (strcmp(commande, "c") == 0) { |
POTLESS_2 | 14:e6686a44db84 | 149 | DEBUG("s_co2_ppm %s +++> data to send %s \r\n",s_co2_ppm,co2_ppm_ToSend); |
POTLESS_2 | 14:e6686a44db84 | 150 | ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), co2_ppm_ToSend, sizeof(co2_ppm_ToSend)); |
POTLESS_2 | 14:e6686a44db84 | 151 | } |
POTLESS_2 | 14:e6686a44db84 | 152 | if (strcmp(commande, "o") == 0) { |
POTLESS_2 | 14:e6686a44db84 | 153 | DEBUG("s_o2_mb %s +++> data to send %s \r\n",s_o2_mb,o2_mb_ToSend); |
POTLESS_2 | 14:e6686a44db84 | 154 | ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), o2_mb_ToSend, sizeof(o2_mb_ToSend)); |
POTLESS_2 | 14:e6686a44db84 | 155 | } |
POTLESS_2 | 15:c9205e490740 | 156 | else |
POTLESS_2 | 15:c9205e490740 | 157 | */ |
POTLESS_2 | 17:6e0c4c0e0fe2 | 158 | |
POTLESS_2 | 17:6e0c4c0e0fe2 | 159 | //En accord avec app Android |
POTLESS_2 | 14:e6686a44db84 | 160 | if (strcmp(commande, "t") == 0) { |
POTLESS_2 | 17:6e0c4c0e0fe2 | 161 | build_send_Message_int("t", co2, ppO2); |
POTLESS_2 | 14:e6686a44db84 | 162 | }else |
POTLESS_2 | 14:e6686a44db84 | 163 | if (strcmp(commande, "u") == 0) { |
POTLESS_2 | 17:6e0c4c0e0fe2 | 164 | build_send_Message_float("u", Temp1, Temp2); |
POTLESS_2 | 17:6e0c4c0e0fe2 | 165 | }else |
POTLESS_2 | 17:6e0c4c0e0fe2 | 166 | if (strcmp(commande, "v") == 0) { |
POTLESS_2 | 17:6e0c4c0e0fe2 | 167 | build_send_Message_float("v", Humi, pression); |
POTLESS_2 | 14:e6686a44db84 | 168 | } |
POTLESS_2 | 14:e6686a44db84 | 169 | } |
POTLESS_2 | 13:aa620707126d | 170 | } |
POTLESS_2 | 14:e6686a44db84 | 171 | |
POTLESS_2 | 7:c5a5d8f678ff | 172 | //Fonction qui change le nom du fichier ouvert pour le LOG |
POTLESS_2 | 7:c5a5d8f678ff | 173 | FILE *nextLogFile(void) |
POTLESS_2 | 7:c5a5d8f678ff | 174 | { |
POTLESS_2 | 7:c5a5d8f678ff | 175 | static unsigned int fileNumber = 0; |
POTLESS_2 | 7:c5a5d8f678ff | 176 | FILE *filePtr = NULL; |
POTLESS_2 | 7:c5a5d8f678ff | 177 | do { |
POTLESS_2 | 7:c5a5d8f678ff | 178 | if (filePtr != NULL) |
POTLESS_2 | 7:c5a5d8f678ff | 179 | fclose(filePtr); |
POTLESS_2 | 7:c5a5d8f678ff | 180 | sprintf(fileName,"/sd/LOG_Capteurs_%04u.txt",fileNumber++); |
POTLESS_2 | 7:c5a5d8f678ff | 181 | filePtr = fopen(fileName,"r"); |
POTLESS_2 | 7:c5a5d8f678ff | 182 | } while (filePtr != NULL); |
POTLESS_2 | 7:c5a5d8f678ff | 183 | return fopen( fileName,"w"); |
POTLESS_2 | 7:c5a5d8f678ff | 184 | } |
POTLESS_2 | 15:c9205e490740 | 185 | |
POTLESS_2 | 14:e6686a44db84 | 186 | void SetTime() |
POTLESS_2 | 14:e6686a44db84 | 187 | { |
POTLESS_2 | 14:e6686a44db84 | 188 | //Reglage date / heure depuis le terminal |
POTLESS_2 | 7:c5a5d8f678ff | 189 | struct tm t; |
POTLESS_2 | 15:c9205e490740 | 190 | serialMonit.printf("Entrer la date et l'heure :\n"); |
POTLESS_2 | 15:c9205e490740 | 191 | serialMonit.printf("YYYY MM DD HH MM SS [enter]\n"); |
POTLESS_2 | 7:c5a5d8f678ff | 192 | scanf("%d %d %d %d %d %d", &t.tm_year, &t.tm_mon, &t.tm_mday |
POTLESS_2 | 14:e6686a44db84 | 193 | , &t.tm_hour, &t.tm_min, &t.tm_sec); |
POTLESS_2 | 7:c5a5d8f678ff | 194 | t.tm_year = t.tm_year - 1900; |
POTLESS_2 | 7:c5a5d8f678ff | 195 | t.tm_mon = t.tm_mon - 1; |
POTLESS_2 | 14:e6686a44db84 | 196 | |
POTLESS_2 | 7:c5a5d8f678ff | 197 | // set the time |
POTLESS_2 | 14:e6686a44db84 | 198 | set_time(mktime(&t)); |
POTLESS_2 | 15:c9205e490740 | 199 | if(NEED_CONSOLE_OUTPUT == 0) serialMonit.printf("OK. Vous pouvez fermer le moniteur serie"); |
POTLESS_2 | 12:9ac5be447764 | 200 | } |
POTLESS_2 | 12:9ac5be447764 | 201 | |
POTLESS_2 | 14:e6686a44db84 | 202 | void init_DATALOG() |
POTLESS_2 | 14:e6686a44db84 | 203 | { |
POTLESS_2 | 12:9ac5be447764 | 204 | //Initialisation DATA LOG |
POTLESS_2 | 14:e6686a44db84 | 205 | DEBUG("Initialisation SD card\r\n"); |
POTLESS_2 | 15:c9205e490740 | 206 | DEBUG("\r\n", ""); |
POTLESS_2 | 12:9ac5be447764 | 207 | fp = nextLogFile(); |
POTLESS_2 | 14:e6686a44db84 | 208 | |
POTLESS_2 | 14:e6686a44db84 | 209 | if (!fp) { |
POTLESS_2 | 14:e6686a44db84 | 210 | DEBUG("Probleme SD card...Fin du programme...\r\n"); |
POTLESS_2 | 14:e6686a44db84 | 211 | //exit(0); |
POTLESS_2 | 14:e6686a44db84 | 212 | } else { |
POTLESS_2 | 14:e6686a44db84 | 213 | DEBUG("Nouveau fichier LOG cree = %s\r\n", fileName); |
POTLESS_2 | 14:e6686a44db84 | 214 | DEBUG("\r\n", ""); |
POTLESS_2 | 12:9ac5be447764 | 215 | } |
POTLESS_2 | 14:e6686a44db84 | 216 | } |
POTLESS_2 | 14:e6686a44db84 | 217 | |
POTLESS_2 | 14:e6686a44db84 | 218 | void DATA_LOG() |
POTLESS_2 | 14:e6686a44db84 | 219 | { |
POTLESS_2 | 12:9ac5be447764 | 220 | time_t seconds = time(NULL); |
POTLESS_2 | 12:9ac5be447764 | 221 | if (fp) { |
POTLESS_2 | 14:e6686a44db84 | 222 | fprintf(fp, "%s,%d,%d,%f,%f,%f,%f\r\n", ctime(&seconds), co2 , ppO2, pression, Temp1, Temp2, Humi); |
POTLESS_2 | 14:e6686a44db84 | 223 | DEBUG(" Enregistrement d'un point sur la carte SD\r\n"); |
POTLESS_2 | 14:e6686a44db84 | 224 | DEBUG(" Nombre de points = %d\r\n", points); |
POTLESS_2 | 14:e6686a44db84 | 225 | DEBUG("\r\n", ""); |
POTLESS_2 | 14:e6686a44db84 | 226 | points++; |
POTLESS_2 | 14:e6686a44db84 | 227 | } else { |
POTLESS_2 | 14:e6686a44db84 | 228 | DEBUG(" Probleme carte SD\r\n"); |
POTLESS_2 | 14:e6686a44db84 | 229 | } |
POTLESS_2 | 14:e6686a44db84 | 230 | } |
potless | 2:4a8bf1d53439 | 231 | /////////////////////////////////// |
potless | 2:4a8bf1d53439 | 232 | // fonction initialisation ///// |
potless | 2:4a8bf1d53439 | 233 | /////////////////////////////////// |
POTLESS_2 | 4:d84250f67dec | 234 | void setup() |
POTLESS_2 | 4:d84250f67dec | 235 | { |
POTLESS_2 | 7:c5a5d8f678ff | 236 | //Réglage de l'heure |
POTLESS_2 | 11:278bdb497ba3 | 237 | SetTime(); |
POTLESS_2 | 14:e6686a44db84 | 238 | |
POTLESS_2 | 15:c9205e490740 | 239 | //Initialisation du Data log |
POTLESS_2 | 15:c9205e490740 | 240 | if (NEED_SD_DATA_LOG == 1) init_DATALOG(); |
POTLESS_2 | 14:e6686a44db84 | 241 | |
POTLESS_2 | 7:c5a5d8f678ff | 242 | //Initialisation capteurs |
POTLESS_2 | 8:e864edfe656e | 243 | arnsrs.Sensors_INIT(false, 5, SPOOLING, DIGI_FILTER32, CALIB_AIR); |
potless | 0:69d4b21d58e0 | 244 | } |
potless | 0:69d4b21d58e0 | 245 | |
potless | 1:bef7856b5c0a | 246 | ///////////////////////////////////// |
potless | 1:bef7856b5c0a | 247 | /// procédure principale ///////// |
potless | 1:bef7856b5c0a | 248 | ///////////////////////////////////// |
potless | 0:69d4b21d58e0 | 249 | |
POTLESS_2 | 4:d84250f67dec | 250 | int main() |
POTLESS_2 | 4:d84250f67dec | 251 | { |
POTLESS_2 | 7:c5a5d8f678ff | 252 | setup(); |
potless | 2:4a8bf1d53439 | 253 | |
POTLESS_2 | 14:e6686a44db84 | 254 | //DEBUG("Initialising....\n\r"); |
POTLESS_2 | 13:aa620707126d | 255 | ble.init(); |
POTLESS_2 | 13:aa620707126d | 256 | ble.onDisconnection(disconnectionCallback); |
POTLESS_2 | 13:aa620707126d | 257 | ble.onDataWritten(onDataWritten); |
POTLESS_2 | 14:e6686a44db84 | 258 | |
POTLESS_2 | 13:aa620707126d | 259 | /* setup advertising */ |
POTLESS_2 | 13:aa620707126d | 260 | ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED); |
POTLESS_2 | 13:aa620707126d | 261 | ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); |
POTLESS_2 | 13:aa620707126d | 262 | ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME, |
POTLESS_2 | 17:6e0c4c0e0fe2 | 263 | (const uint8_t *)"ARNSRS", sizeof("ARNSRS") - 1); |
POTLESS_2 | 13:aa620707126d | 264 | ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS, |
POTLESS_2 | 13:aa620707126d | 265 | (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed)); |
POTLESS_2 | 14:e6686a44db84 | 266 | |
POTLESS_2 | 13:aa620707126d | 267 | ble.setAdvertisingInterval(1000); /* 1000ms; in multiples of 0.625ms. */ |
POTLESS_2 | 13:aa620707126d | 268 | ble.startAdvertising(); |
POTLESS_2 | 14:e6686a44db84 | 269 | |
POTLESS_2 | 13:aa620707126d | 270 | UARTService uartService(ble); |
POTLESS_2 | 13:aa620707126d | 271 | uartServicePtr = &uartService; |
POTLESS_2 | 14:e6686a44db84 | 272 | |
POTLESS_2 | 4:d84250f67dec | 273 | while (1) { |
POTLESS_2 | 5:e1d0dc7940a6 | 274 | |
POTLESS_2 | 14:e6686a44db84 | 275 | ble.waitForEvent(); |
POTLESS_2 | 14:e6686a44db84 | 276 | |
POTLESS_2 | 15:c9205e490740 | 277 | //wait_ms(500); |
POTLESS_2 | 14:e6686a44db84 | 278 | |
POTLESS_2 | 5:e1d0dc7940a6 | 279 | //RTC |
POTLESS_2 | 7:c5a5d8f678ff | 280 | time_t seconds = time(NULL); |
POTLESS_2 | 14:e6686a44db84 | 281 | |
POTLESS_2 | 14:e6686a44db84 | 282 | DEBUG(" Date / Heure = %s\r\n", ctime(&seconds)); |
POTLESS_2 | 14:e6686a44db84 | 283 | |
POTLESS_2 | 4:d84250f67dec | 284 | //CO2 / H / T sur Cozir |
POTLESS_2 | 6:1c2212891714 | 285 | co2 = arnsrs.requestCO2(); |
POTLESS_2 | 6:1c2212891714 | 286 | Humi = arnsrs.requestHUMI(); |
POTLESS_2 | 14:e6686a44db84 | 287 | Temp1 = arnsrs.requestTEMP(); |
POTLESS_2 | 14:e6686a44db84 | 288 | |
POTLESS_2 | 6:1c2212891714 | 289 | //P / T sur MS5803_14BA |
POTLESS_2 | 5:e1d0dc7940a6 | 290 | pression = arnsrs.requestPress(); |
POTLESS_2 | 5:e1d0dc7940a6 | 291 | Temp2 = arnsrs.requestTemp(); |
POTLESS_2 | 5:e1d0dc7940a6 | 292 | |
POTLESS_2 | 5:e1d0dc7940a6 | 293 | //PPO2 sur ADS1015 |
POTLESS_2 | 8:e864edfe656e | 294 | ppO2 = arnsrs.requestPpO2(false); |
POTLESS_2 | 5:e1d0dc7940a6 | 295 | |
POTLESS_2 | 5:e1d0dc7940a6 | 296 | //Affichage sur moniteur série |
POTLESS_2 | 14:e6686a44db84 | 297 | DEBUG(" CO2 = %d\r\n" , co2); |
POTLESS_2 | 15:c9205e490740 | 298 | DEBUG(" Humidite = %f\r\n" , Humi); |
POTLESS_2 | 15:c9205e490740 | 299 | DEBUG(" Temperature = %f\r\n" ,Temp1); |
POTLESS_2 | 4:d84250f67dec | 300 | //P / T sur MS5803 |
POTLESS_2 | 14:e6686a44db84 | 301 | DEBUG(" Pression = %f\r\n", pression); |
POTLESS_2 | 15:c9205e490740 | 302 | DEBUG(" Temperature = %f\r\n", Temp2); |
POTLESS_2 | 4:d84250f67dec | 303 | //PPO2 sur ADS1015 |
POTLESS_2 | 14:e6686a44db84 | 304 | DEBUG(" PPO2 = %d\r\n", ppO2); |
POTLESS_2 | 14:e6686a44db84 | 305 | DEBUG("\r\n", ""); |
POTLESS_2 | 5:e1d0dc7940a6 | 306 | |
POTLESS_2 | 15:c9205e490740 | 307 | //Traceur |
POTLESS_2 | 16:fc7d8cc6bf4b | 308 | TRACE("%d" , co2); |
POTLESS_2 | 16:fc7d8cc6bf4b | 309 | TRACE(", "); |
POTLESS_2 | 16:fc7d8cc6bf4b | 310 | TRACE("%d" , ppO2); |
POTLESS_2 | 16:fc7d8cc6bf4b | 311 | TRACE(", "); |
POTLESS_2 | 16:fc7d8cc6bf4b | 312 | TRACE("%f" , Humi); |
POTLESS_2 | 16:fc7d8cc6bf4b | 313 | TRACE(", "); |
POTLESS_2 | 16:fc7d8cc6bf4b | 314 | TRACE("%f" , Temp1); |
POTLESS_2 | 16:fc7d8cc6bf4b | 315 | TRACE(", "); |
POTLESS_2 | 16:fc7d8cc6bf4b | 316 | TRACE("%f" , Temp2); |
POTLESS_2 | 16:fc7d8cc6bf4b | 317 | TRACE(", "); |
POTLESS_2 | 16:fc7d8cc6bf4b | 318 | TRACE("%f" , pression); |
POTLESS_2 | 16:fc7d8cc6bf4b | 319 | TRACE("\r\n"); |
POTLESS_2 | 15:c9205e490740 | 320 | |
POTLESS_2 | 7:c5a5d8f678ff | 321 | //Data LOG |
POTLESS_2 | 15:c9205e490740 | 322 | if (NEED_SD_DATA_LOG == 1) DATA_LOG(); |
POTLESS_2 | 15:c9205e490740 | 323 | |
POTLESS_2 | 17:6e0c4c0e0fe2 | 324 | //En accord avec app Android |
POTLESS_2 | 17:6e0c4c0e0fe2 | 325 | build_send_Message_int("t", co2, ppO2); |
POTLESS_2 | 17:6e0c4c0e0fe2 | 326 | build_send_Message_float("u", Temp1, Temp2); |
POTLESS_2 | 17:6e0c4c0e0fe2 | 327 | build_send_Message_float("v", Humi, pression); |
POTLESS_2 | 15:c9205e490740 | 328 | |
POTLESS_2 | 13:aa620707126d | 329 | } |
POTLESS_2 | 4:d84250f67dec | 330 | } |