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 POTLESS

Committer:
POTLESS_2
Date:
Sun May 14 16:52:18 2017 +0000
Revision:
19:31ac20c07bb2
Parent:
18:e3827d5dbdd9
Child:
20:bb8d2cea2076
Marche plus.....

Who changed what in which revision?

UserRevisionLine numberNew contents of line
POTLESS_2 19:31ac20c07bb2 1 /*
POTLESS_2 19:31ac20c07bb2 2 Stm32L476RG
potless 2:4a8bf1d53439 3
POTLESS_2 19:31ac20c07bb2 4 2 servos
POTLESS_2 19:31ac20c07bb2 5 BLE => Android
potless 2:4a8bf1d53439 6
POTLESS_2 4:d84250f67dec 7 */
potless 0:69d4b21d58e0 8
potless 1:bef7856b5c0a 9 #include "mbed.h"
POTLESS_2 5:e1d0dc7940a6 10 #include "SDFileSystem.h"
POTLESS_2 5:e1d0dc7940a6 11 #include "ARNSRS_SENSORS.h"
POTLESS_2 13:aa620707126d 12 #include "ble/BLE.h"
POTLESS_2 14:e6686a44db84 13
POTLESS_2 13:aa620707126d 14 #include "ble/services/UARTService.h"
POTLESS_2 13:aa620707126d 15 #include <string>
POTLESS_2 13:aa620707126d 16
POTLESS_2 15:c9205e490740 17 //Ecrit dans le moniteur série de l'ordi à 9600 bds si sur 1
POTLESS_2 15:c9205e490740 18 #define NEED_CONSOLE_OUTPUT 1
POTLESS_2 16:fc7d8cc6bf4b 19 //Pour utiliser le traceur du moniteur Arduino. Mettre NEED_CONSOLE_OUTPUT 0 si utilisé.
POTLESS_2 16:fc7d8cc6bf4b 20 //En premier ouvrir le moniteur série pour régler la RTC, puis fermer et ouvrir le traceur série
POTLESS_2 15:c9205e490740 21 #define NEED_GRAPH_OUTPUT 0
POTLESS_2 15:c9205e490740 22 //Datalog carte SD si sur 1
POTLESS_2 16:fc7d8cc6bf4b 23 #define NEED_SD_DATA_LOG 0
POTLESS_2 19:31ac20c07bb2 24 //BLE avec app android
POTLESS_2 19:31ac20c07bb2 25 #define NEED_BLE_ANDROID 1
POTLESS_2 15:c9205e490740 26
POTLESS_2 15:c9205e490740 27 #if NEED_CONSOLE_OUTPUT
POTLESS_2 14:e6686a44db84 28 #define DEBUG(...) { serialMonit.printf(__VA_ARGS__); }
POTLESS_2 15:c9205e490740 29 #else
POTLESS_2 15:c9205e490740 30 #define DEBUG(...)
POTLESS_2 15:c9205e490740 31 #endif
POTLESS_2 15:c9205e490740 32
POTLESS_2 15:c9205e490740 33 #if NEED_GRAPH_OUTPUT
POTLESS_2 15:c9205e490740 34 #define TRACE(...) { serialMonit.printf(__VA_ARGS__); }
POTLESS_2 15:c9205e490740 35 #else
POTLESS_2 15:c9205e490740 36 #define TRACE(...)
POTLESS_2 15:c9205e490740 37 #endif
POTLESS_2 13:aa620707126d 38
POTLESS_2 19:31ac20c07bb2 39
POTLESS_2 19:31ac20c07bb2 40 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 41 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 42
POTLESS_2 19:31ac20c07bb2 43
POTLESS_2 18:e3827d5dbdd9 44 //Contrôle des servos
POTLESS_2 18:e3827d5dbdd9 45 PwmOut servo1(PB_5);
POTLESS_2 19:31ac20c07bb2 46 AnalogIn FeedBack1(PB_0);
POTLESS_2 19:31ac20c07bb2 47 float Servo1_POS;
POTLESS_2 19:31ac20c07bb2 48 float Limit_min_S1, Limit_max_S1;
POTLESS_2 19:31ac20c07bb2 49 float Delta_FB_1;
POTLESS_2 19:31ac20c07bb2 50
POTLESS_2 19:31ac20c07bb2 51 PwmOut servo2(PB_4);
POTLESS_2 19:31ac20c07bb2 52 AnalogIn FeedBack2(PA_4);
POTLESS_2 19:31ac20c07bb2 53 float Servo2_POS;
POTLESS_2 19:31ac20c07bb2 54 float Limit_min_S2, Limit_max_S2;
POTLESS_2 19:31ac20c07bb2 55 float Delta_FB_2;
POTLESS_2 18:e3827d5dbdd9 56
POTLESS_2 13:aa620707126d 57 //Init BLE
POTLESS_2 13:aa620707126d 58 BLEDevice ble;
POTLESS_2 13:aa620707126d 59 UARTService *uartServicePtr;
POTLESS_2 5:e1d0dc7940a6 60
POTLESS_2 5:e1d0dc7940a6 61 //Init de la lib ARNSRS;
POTLESS_2 5:e1d0dc7940a6 62 ARNSRS arnsrs;
POTLESS_2 5:e1d0dc7940a6 63
POTLESS_2 9:d945fa4be3a5 64 //COM Série vers l'ordi, Serial 2 par défaut
POTLESS_2 14:e6686a44db84 65 Serial serialMonit (USBTX,USBRX);
potless 2:4a8bf1d53439 66
POTLESS_2 5:e1d0dc7940a6 67 //Variable des capteurs
POTLESS_2 12:9ac5be447764 68 int co2 = 0;
POTLESS_2 12:9ac5be447764 69 int ppO2 = 0;
POTLESS_2 12:9ac5be447764 70 float pression = 0;
POTLESS_2 12:9ac5be447764 71 float Temp1 = 0;
POTLESS_2 12:9ac5be447764 72 float Temp2 = 0;
POTLESS_2 12:9ac5be447764 73 float Humi = 0;
POTLESS_2 12:9ac5be447764 74
POTLESS_2 15:c9205e490740 75 //Pour stocker le format date / heure
POTLESS_2 5:e1d0dc7940a6 76 string DateHeure;
potless 2:4a8bf1d53439 77
POTLESS_2 6:1c2212891714 78 //SD card
POTLESS_2 6:1c2212891714 79 SDFileSystem sd(D11, D12, D13, D10, "sd"); // MOSI, MISO, SCK, CS
POTLESS_2 6:1c2212891714 80 FILE *fp;
POTLESS_2 7:c5a5d8f678ff 81 char fileName[32];
POTLESS_2 7:c5a5d8f678ff 82 int points = 1;
POTLESS_2 4:d84250f67dec 83
POTLESS_2 19:31ac20c07bb2 84 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 85 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 15:c9205e490740 86
POTLESS_2 19:31ac20c07bb2 87
POTLESS_2 19:31ac20c07bb2 88
POTLESS_2 19:31ac20c07bb2 89 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 90 ///// Remap d'une valeur /////
POTLESS_2 19:31ac20c07bb2 91 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 92
POTLESS_2 19:31ac20c07bb2 93 float remap(float x, float in_min, float in_max, float out_min, float out_max)
POTLESS_2 19:31ac20c07bb2 94 {
POTLESS_2 19:31ac20c07bb2 95 return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
POTLESS_2 19:31ac20c07bb2 96 }
POTLESS_2 19:31ac20c07bb2 97
POTLESS_2 19:31ac20c07bb2 98 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 99 //// Fonction pour créer et envoyer la chaine d'infos en BLE ////
POTLESS_2 19:31ac20c07bb2 100 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 101
POTLESS_2 19:31ac20c07bb2 102 //On balance deux float
POTLESS_2 17:6e0c4c0e0fe2 103 void build_send_Message_float(string com, float A, float B)
POTLESS_2 14:e6686a44db84 104 {
POTLESS_2 14:e6686a44db84 105 char buf[50];
POTLESS_2 17:6e0c4c0e0fe2 106 sprintf(buf,"%s%.1f:%.1f\r\n", com.c_str(), A, B);
POTLESS_2 14:e6686a44db84 107 uartServicePtr->writeString(buf);
POTLESS_2 17:6e0c4c0e0fe2 108 wait_ms(100);
POTLESS_2 17:6e0c4c0e0fe2 109 }
POTLESS_2 17:6e0c4c0e0fe2 110
POTLESS_2 19:31ac20c07bb2 111 //On balance deux int
POTLESS_2 17:6e0c4c0e0fe2 112 void build_send_Message_int(string com, int A, int B)
POTLESS_2 17:6e0c4c0e0fe2 113 {
POTLESS_2 17:6e0c4c0e0fe2 114 char buf[50];
POTLESS_2 17:6e0c4c0e0fe2 115 sprintf(buf,"%s%d:%d\r\n", com.c_str(), A, B);
POTLESS_2 17:6e0c4c0e0fe2 116 uartServicePtr->writeString(buf);
POTLESS_2 17:6e0c4c0e0fe2 117 wait_ms(100);
POTLESS_2 14:e6686a44db84 118 }
POTLESS_2 13:aa620707126d 119
POTLESS_2 19:31ac20c07bb2 120 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 121 //// BLE ////
POTLESS_2 19:31ac20c07bb2 122 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 123
POTLESS_2 13:aa620707126d 124 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
POTLESS_2 13:aa620707126d 125 {
POTLESS_2 14:e6686a44db84 126 //DEBUG("Disconnected!\n\r");
POTLESS_2 14:e6686a44db84 127 //DEBUG("Restarting the advertising process\n\r");
POTLESS_2 13:aa620707126d 128 ble.startAdvertising();
POTLESS_2 13:aa620707126d 129 }
POTLESS_2 13:aa620707126d 130
POTLESS_2 19:31ac20c07bb2 131 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 132 //// Fonction commande servos par BLE ////
POTLESS_2 19:31ac20c07bb2 133 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 134
POTLESS_2 19:31ac20c07bb2 135 void Servo_BLE(char message_Android [])
POTLESS_2 19:31ac20c07bb2 136 {
POTLESS_2 19:31ac20c07bb2 137
POTLESS_2 19:31ac20c07bb2 138 //Variables pour décomposition du message
POTLESS_2 19:31ac20c07bb2 139 char *commande, *valeur;
POTLESS_2 19:31ac20c07bb2 140
POTLESS_2 19:31ac20c07bb2 141 //La commande
POTLESS_2 19:31ac20c07bb2 142 commande = strtok(message_Android, ",;");
POTLESS_2 19:31ac20c07bb2 143 DEBUG("Commande = %s\n", commande);
POTLESS_2 19:31ac20c07bb2 144
POTLESS_2 19:31ac20c07bb2 145 //La valeur associée
POTLESS_2 19:31ac20c07bb2 146 valeur = strtok(NULL, ",;");
POTLESS_2 19:31ac20c07bb2 147 DEBUG("Valeur = %s\n", valeur);
POTLESS_2 19:31ac20c07bb2 148
POTLESS_2 19:31ac20c07bb2 149 //On compare la commande pour faire les actions
POTLESS_2 19:31ac20c07bb2 150
POTLESS_2 19:31ac20c07bb2 151 //Commande servo1
POTLESS_2 19:31ac20c07bb2 152 if(strcmp(commande, "[S1]") == 0) {
POTLESS_2 19:31ac20c07bb2 153 servo1 = atoi(valeur) / 100.f;
POTLESS_2 19:31ac20c07bb2 154 DEBUG(" Servo 1 = %s\n", valeur);
POTLESS_2 19:31ac20c07bb2 155 }
POTLESS_2 19:31ac20c07bb2 156
POTLESS_2 19:31ac20c07bb2 157 //Commande servo2
POTLESS_2 19:31ac20c07bb2 158 if(strcmp(commande, "[S2]") == 0) {
POTLESS_2 19:31ac20c07bb2 159 servo2 = atoi(valeur) / 100.f;
POTLESS_2 19:31ac20c07bb2 160 DEBUG("Servo 2 = %f\r\n", valeur);
POTLESS_2 19:31ac20c07bb2 161 }
POTLESS_2 19:31ac20c07bb2 162 }
POTLESS_2 19:31ac20c07bb2 163
POTLESS_2 19:31ac20c07bb2 164 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 165 //// Echanges UART ////
POTLESS_2 19:31ac20c07bb2 166 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 167
POTLESS_2 13:aa620707126d 168 void onDataWritten(const GattWriteCallbackParams *params)
POTLESS_2 13:aa620707126d 169 {
POTLESS_2 13:aa620707126d 170 if ((uartServicePtr != NULL) && (params->handle == uartServicePtr->getTXCharacteristicHandle())) {
POTLESS_2 13:aa620707126d 171 uint16_t bytesRead = params->len;
POTLESS_2 14:e6686a44db84 172
POTLESS_2 14:e6686a44db84 173 // chaine reçue de l'app android (à dimensionner selon besoin)
POTLESS_2 18:e3827d5dbdd9 174 char message [bytesRead] ;
POTLESS_2 14:e6686a44db84 175
POTLESS_2 13:aa620707126d 176 // conversion de la commande uint8_t en chaine pour permettre comparaison avec commandes connues
POTLESS_2 14:e6686a44db84 177 for (int j=0; j<bytesRead; j++) {
POTLESS_2 18:e3827d5dbdd9 178 message [j] = (*((params->data)+j));
POTLESS_2 13:aa620707126d 179 }
POTLESS_2 19:31ac20c07bb2 180
POTLESS_2 19:31ac20c07bb2 181 Servo_BLE(message);
POTLESS_2 19:31ac20c07bb2 182 }
POTLESS_2 19:31ac20c07bb2 183 }
POTLESS_2 14:e6686a44db84 184
POTLESS_2 19:31ac20c07bb2 185 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 186 //// Fonction qui change le nom du fichier ouvert pour le LOG ////
POTLESS_2 19:31ac20c07bb2 187 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 17:6e0c4c0e0fe2 188
POTLESS_2 7:c5a5d8f678ff 189 FILE *nextLogFile(void)
POTLESS_2 7:c5a5d8f678ff 190 {
POTLESS_2 7:c5a5d8f678ff 191 static unsigned int fileNumber = 0;
POTLESS_2 7:c5a5d8f678ff 192 FILE *filePtr = NULL;
POTLESS_2 7:c5a5d8f678ff 193 do {
POTLESS_2 7:c5a5d8f678ff 194 if (filePtr != NULL)
POTLESS_2 7:c5a5d8f678ff 195 fclose(filePtr);
POTLESS_2 7:c5a5d8f678ff 196 sprintf(fileName,"/sd/LOG_Capteurs_%04u.txt",fileNumber++);
POTLESS_2 7:c5a5d8f678ff 197 filePtr = fopen(fileName,"r");
POTLESS_2 7:c5a5d8f678ff 198 } while (filePtr != NULL);
POTLESS_2 7:c5a5d8f678ff 199 return fopen( fileName,"w");
POTLESS_2 7:c5a5d8f678ff 200 }
POTLESS_2 15:c9205e490740 201
POTLESS_2 19:31ac20c07bb2 202 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 203 //// Réglage de l'heure par le moniteur série ////
POTLESS_2 19:31ac20c07bb2 204 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 205
POTLESS_2 14:e6686a44db84 206 void SetTime()
POTLESS_2 14:e6686a44db84 207 {
POTLESS_2 14:e6686a44db84 208 //Reglage date / heure depuis le terminal
POTLESS_2 7:c5a5d8f678ff 209 struct tm t;
POTLESS_2 19:31ac20c07bb2 210 printf("Entrer la date et l'heure :\n");
POTLESS_2 19:31ac20c07bb2 211 printf("YYYY MM DD HH MM SS [enter]\n");
POTLESS_2 7:c5a5d8f678ff 212 scanf("%d %d %d %d %d %d", &t.tm_year, &t.tm_mon, &t.tm_mday
POTLESS_2 14:e6686a44db84 213 , &t.tm_hour, &t.tm_min, &t.tm_sec);
POTLESS_2 7:c5a5d8f678ff 214 t.tm_year = t.tm_year - 1900;
POTLESS_2 7:c5a5d8f678ff 215 t.tm_mon = t.tm_mon - 1;
POTLESS_2 14:e6686a44db84 216
POTLESS_2 7:c5a5d8f678ff 217 // set the time
POTLESS_2 14:e6686a44db84 218 set_time(mktime(&t));
POTLESS_2 19:31ac20c07bb2 219
POTLESS_2 19:31ac20c07bb2 220 if(NEED_CONSOLE_OUTPUT == 0) printf("OK. Vous pouvez fermer le moniteur serie");
POTLESS_2 12:9ac5be447764 221 }
POTLESS_2 12:9ac5be447764 222
POTLESS_2 19:31ac20c07bb2 223 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 224 //// Initialisation DATA LOG ////
POTLESS_2 19:31ac20c07bb2 225 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 226
POTLESS_2 14:e6686a44db84 227 void init_DATALOG()
POTLESS_2 14:e6686a44db84 228 {
POTLESS_2 19:31ac20c07bb2 229
POTLESS_2 14:e6686a44db84 230 DEBUG("Initialisation SD card\r\n");
POTLESS_2 15:c9205e490740 231 DEBUG("\r\n", "");
POTLESS_2 12:9ac5be447764 232 fp = nextLogFile();
POTLESS_2 14:e6686a44db84 233
POTLESS_2 14:e6686a44db84 234 if (!fp) {
POTLESS_2 14:e6686a44db84 235 DEBUG("Probleme SD card...Fin du programme...\r\n");
POTLESS_2 14:e6686a44db84 236 //exit(0);
POTLESS_2 14:e6686a44db84 237 } else {
POTLESS_2 14:e6686a44db84 238 DEBUG("Nouveau fichier LOG cree = %s\r\n", fileName);
POTLESS_2 14:e6686a44db84 239 DEBUG("\r\n", "");
POTLESS_2 12:9ac5be447764 240 }
POTLESS_2 14:e6686a44db84 241 }
POTLESS_2 14:e6686a44db84 242
POTLESS_2 19:31ac20c07bb2 243 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 244 //// Initialisation du BLE ////
POTLESS_2 19:31ac20c07bb2 245 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 246
POTLESS_2 19:31ac20c07bb2 247 void init_BLE()
POTLESS_2 4:d84250f67dec 248 {
POTLESS_2 13:aa620707126d 249 ble.init();
POTLESS_2 13:aa620707126d 250 ble.onDisconnection(disconnectionCallback);
POTLESS_2 13:aa620707126d 251 ble.onDataWritten(onDataWritten);
POTLESS_2 14:e6686a44db84 252
POTLESS_2 13:aa620707126d 253 /* setup advertising */
POTLESS_2 13:aa620707126d 254 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
POTLESS_2 13:aa620707126d 255 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
POTLESS_2 13:aa620707126d 256 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
POTLESS_2 17:6e0c4c0e0fe2 257 (const uint8_t *)"ARNSRS", sizeof("ARNSRS") - 1);
POTLESS_2 13:aa620707126d 258 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
POTLESS_2 13:aa620707126d 259 (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
POTLESS_2 14:e6686a44db84 260
POTLESS_2 13:aa620707126d 261 ble.setAdvertisingInterval(1000); /* 1000ms; in multiples of 0.625ms. */
POTLESS_2 13:aa620707126d 262 ble.startAdvertising();
POTLESS_2 14:e6686a44db84 263
POTLESS_2 13:aa620707126d 264 UARTService uartService(ble);
POTLESS_2 13:aa620707126d 265 uartServicePtr = &uartService;
POTLESS_2 19:31ac20c07bb2 266 }
POTLESS_2 19:31ac20c07bb2 267
POTLESS_2 19:31ac20c07bb2 268 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 269 //// Fonction d'enregistrement des données sur carte SD ////
POTLESS_2 19:31ac20c07bb2 270 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 271
POTLESS_2 19:31ac20c07bb2 272 void DATA_LOG()
POTLESS_2 19:31ac20c07bb2 273 {
POTLESS_2 19:31ac20c07bb2 274 time_t seconds = time(NULL);
POTLESS_2 19:31ac20c07bb2 275
POTLESS_2 19:31ac20c07bb2 276 if (fp) {
POTLESS_2 19:31ac20c07bb2 277 fprintf(fp, "%s,%d,%d,%f,%f,%f,%f\r\n", ctime(&seconds), co2 , ppO2, pression, Temp1, Temp2, Humi);
POTLESS_2 19:31ac20c07bb2 278 DEBUG(" Enregistrement d'un point sur la carte SD\r\n");
POTLESS_2 19:31ac20c07bb2 279 DEBUG(" Nombre de points = %d\r\n", points);
POTLESS_2 19:31ac20c07bb2 280 DEBUG("\r\n", "");
POTLESS_2 19:31ac20c07bb2 281 points++;
POTLESS_2 19:31ac20c07bb2 282 } else {
POTLESS_2 19:31ac20c07bb2 283 DEBUG(" Probleme carte SD\r\n");
POTLESS_2 19:31ac20c07bb2 284 }
POTLESS_2 19:31ac20c07bb2 285 }
POTLESS_2 19:31ac20c07bb2 286
POTLESS_2 19:31ac20c07bb2 287 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 288 //// Calibration des limites de feedback des servos ////
POTLESS_2 19:31ac20c07bb2 289 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 290
POTLESS_2 19:31ac20c07bb2 291 void Calibration_servo()
POTLESS_2 19:31ac20c07bb2 292 {
POTLESS_2 19:31ac20c07bb2 293 //Servos, calibration du feedback
POTLESS_2 19:31ac20c07bb2 294 servo1.period(0.001);
POTLESS_2 19:31ac20c07bb2 295 servo2.period(0.001);
POTLESS_2 19:31ac20c07bb2 296
POTLESS_2 19:31ac20c07bb2 297 DEBUG("Check Servos :\r\n")
POTLESS_2 19:31ac20c07bb2 298 servo1 = 0;
POTLESS_2 19:31ac20c07bb2 299 servo2 = 0;
POTLESS_2 19:31ac20c07bb2 300 wait(4);
POTLESS_2 19:31ac20c07bb2 301 DEBUG(" FeedBack 1 MIN = %f\n", FeedBack1.read());
POTLESS_2 19:31ac20c07bb2 302 DEBUG(" FeedBack 2 MIN = %f\n", FeedBack2.read());
POTLESS_2 19:31ac20c07bb2 303 Limit_max_S1 = FeedBack1;
POTLESS_2 19:31ac20c07bb2 304 Limit_max_S2 = FeedBack2;
POTLESS_2 19:31ac20c07bb2 305 servo1 = 1;
POTLESS_2 19:31ac20c07bb2 306 servo2 = 1;
POTLESS_2 19:31ac20c07bb2 307 wait(4);
POTLESS_2 19:31ac20c07bb2 308 DEBUG(" FeedBack 1 MAX = %f\n", FeedBack1.read());
POTLESS_2 19:31ac20c07bb2 309 DEBUG(" FeedBack 2 MAX = %f\n", FeedBack2.read());
POTLESS_2 19:31ac20c07bb2 310 Limit_min_S1 = FeedBack1;
POTLESS_2 19:31ac20c07bb2 311 Limit_min_S2 = FeedBack2;
POTLESS_2 19:31ac20c07bb2 312 servo1 = 0.5;
POTLESS_2 19:31ac20c07bb2 313 servo2 = 0.5;
POTLESS_2 19:31ac20c07bb2 314 wait(4);
POTLESS_2 19:31ac20c07bb2 315
POTLESS_2 19:31ac20c07bb2 316 //Mesure du delta consigne / feedback
POTLESS_2 19:31ac20c07bb2 317 Delta_FB_1 = abs(remap(FeedBack1, Limit_max_S1, Limit_min_S1, 0, 100) - 50);
POTLESS_2 19:31ac20c07bb2 318 Delta_FB_2 = abs(remap(FeedBack2, Limit_max_S1, Limit_min_S1, 0, 100) - 50);
POTLESS_2 19:31ac20c07bb2 319
POTLESS_2 19:31ac20c07bb2 320 DEBUG(" Delta Servo 1 = %f\n", Delta_FB_1);
POTLESS_2 19:31ac20c07bb2 321 DEBUG(" Delta Servo 2 = %f\n", Delta_FB_2);
POTLESS_2 19:31ac20c07bb2 322
POTLESS_2 19:31ac20c07bb2 323 }
POTLESS_2 19:31ac20c07bb2 324
POTLESS_2 19:31ac20c07bb2 325 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 326 //// Fonction d'affichage de tout dans le moniteur série ou le traceur ////
POTLESS_2 19:31ac20c07bb2 327 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 328
POTLESS_2 19:31ac20c07bb2 329 void Debug_Complet()
POTLESS_2 19:31ac20c07bb2 330 {
POTLESS_2 19:31ac20c07bb2 331
POTLESS_2 19:31ac20c07bb2 332 //RTC
POTLESS_2 19:31ac20c07bb2 333 time_t seconds = time(NULL);
POTLESS_2 19:31ac20c07bb2 334
POTLESS_2 19:31ac20c07bb2 335 DEBUG(" Date / Heure = %s\r\n", ctime(&seconds));
POTLESS_2 19:31ac20c07bb2 336
POTLESS_2 19:31ac20c07bb2 337 //Retour capteurs
POTLESS_2 19:31ac20c07bb2 338 DEBUG(" CO2 = %d\r\n" , co2);
POTLESS_2 19:31ac20c07bb2 339 DEBUG(" Humidite = %f\r\n" , Humi);
POTLESS_2 19:31ac20c07bb2 340 DEBUG(" Temperature = %f\r\n" ,Temp1);
POTLESS_2 19:31ac20c07bb2 341 //P / T sur MS5803
POTLESS_2 19:31ac20c07bb2 342 DEBUG(" Pression = %f\r\n", pression);
POTLESS_2 19:31ac20c07bb2 343 DEBUG(" Temperature = %f\r\n", Temp2);
POTLESS_2 19:31ac20c07bb2 344 //PPO2 sur ADS1015
POTLESS_2 19:31ac20c07bb2 345 DEBUG(" PPO2 = %d\r\n", ppO2);
POTLESS_2 19:31ac20c07bb2 346 DEBUG("\r\n", "");
POTLESS_2 19:31ac20c07bb2 347
POTLESS_2 19:31ac20c07bb2 348 //Retour position des servos
POTLESS_2 19:31ac20c07bb2 349 DEBUG(" FeedBack 1 = %3.2f%%\n", Servo1_POS);
POTLESS_2 19:31ac20c07bb2 350 DEBUG(" FeedBack 2 = %3.2f%%\n", Servo2_POS);
POTLESS_2 19:31ac20c07bb2 351
POTLESS_2 19:31ac20c07bb2 352 //Traceur
POTLESS_2 19:31ac20c07bb2 353 TRACE("%d" , co2);
POTLESS_2 19:31ac20c07bb2 354 TRACE(", ");
POTLESS_2 19:31ac20c07bb2 355 TRACE("%d" , ppO2);
POTLESS_2 19:31ac20c07bb2 356 TRACE(", ");
POTLESS_2 19:31ac20c07bb2 357 TRACE("%f" , Humi);
POTLESS_2 19:31ac20c07bb2 358 TRACE(", ");
POTLESS_2 19:31ac20c07bb2 359 TRACE("%f" , Temp1);
POTLESS_2 19:31ac20c07bb2 360 TRACE(", ");
POTLESS_2 19:31ac20c07bb2 361 TRACE("%f" , Temp2);
POTLESS_2 19:31ac20c07bb2 362 TRACE(", ");
POTLESS_2 19:31ac20c07bb2 363 TRACE("%f" , pression);
POTLESS_2 19:31ac20c07bb2 364 TRACE("\r\n");
POTLESS_2 19:31ac20c07bb2 365 }
POTLESS_2 19:31ac20c07bb2 366
POTLESS_2 19:31ac20c07bb2 367 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 368 /// fonction initialisation //
POTLESS_2 19:31ac20c07bb2 369 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 370
POTLESS_2 19:31ac20c07bb2 371 void setup()
POTLESS_2 19:31ac20c07bb2 372 {
POTLESS_2 19:31ac20c07bb2 373 wait(2);
POTLESS_2 19:31ac20c07bb2 374
POTLESS_2 19:31ac20c07bb2 375 //Réglage de l'heure
POTLESS_2 19:31ac20c07bb2 376 SetTime();
POTLESS_2 19:31ac20c07bb2 377
POTLESS_2 19:31ac20c07bb2 378 //Initialisation BLE
POTLESS_2 19:31ac20c07bb2 379 init_BLE();
POTLESS_2 19:31ac20c07bb2 380
POTLESS_2 19:31ac20c07bb2 381 //Calibration des limites des servos pour remapper les feedback
POTLESS_2 19:31ac20c07bb2 382 Calibration_servo();
POTLESS_2 19:31ac20c07bb2 383
POTLESS_2 19:31ac20c07bb2 384 //Initialisation du Data log
POTLESS_2 19:31ac20c07bb2 385 if (NEED_SD_DATA_LOG == 1) init_DATALOG();
POTLESS_2 19:31ac20c07bb2 386
POTLESS_2 19:31ac20c07bb2 387 //Initialisation capteurs
POTLESS_2 19:31ac20c07bb2 388 arnsrs.Sensors_INIT(false, 5, SPOOLING, DIGI_FILTER32, CALIB_AIR);
POTLESS_2 19:31ac20c07bb2 389 }
POTLESS_2 19:31ac20c07bb2 390
POTLESS_2 19:31ac20c07bb2 391 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 392 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 393
POTLESS_2 19:31ac20c07bb2 394 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 395 /// procédure principale ///
POTLESS_2 19:31ac20c07bb2 396 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 397
POTLESS_2 19:31ac20c07bb2 398 int main()
POTLESS_2 19:31ac20c07bb2 399 {
POTLESS_2 19:31ac20c07bb2 400 setup();
POTLESS_2 14:e6686a44db84 401
POTLESS_2 4:d84250f67dec 402 while (1) {
POTLESS_2 5:e1d0dc7940a6 403
POTLESS_2 14:e6686a44db84 404 ble.waitForEvent();
POTLESS_2 14:e6686a44db84 405
POTLESS_2 4:d84250f67dec 406 //CO2 / H / T sur Cozir
POTLESS_2 6:1c2212891714 407 co2 = arnsrs.requestCO2();
POTLESS_2 6:1c2212891714 408 Humi = arnsrs.requestHUMI();
POTLESS_2 14:e6686a44db84 409 Temp1 = arnsrs.requestTEMP();
POTLESS_2 14:e6686a44db84 410
POTLESS_2 6:1c2212891714 411 //P / T sur MS5803_14BA
POTLESS_2 5:e1d0dc7940a6 412 pression = arnsrs.requestPress();
POTLESS_2 5:e1d0dc7940a6 413 Temp2 = arnsrs.requestTemp();
POTLESS_2 5:e1d0dc7940a6 414
POTLESS_2 5:e1d0dc7940a6 415 //PPO2 sur ADS1015
POTLESS_2 8:e864edfe656e 416 ppO2 = arnsrs.requestPpO2(false);
POTLESS_2 5:e1d0dc7940a6 417
POTLESS_2 19:31ac20c07bb2 418 //Retour position des servos
POTLESS_2 19:31ac20c07bb2 419 Servo1_POS = remap(FeedBack1, Limit_max_S1, Limit_min_S1, 0, 100);
POTLESS_2 19:31ac20c07bb2 420 Servo2_POS = remap(FeedBack2, Limit_max_S2, Limit_min_S2, 0, 100);
POTLESS_2 5:e1d0dc7940a6 421
POTLESS_2 19:31ac20c07bb2 422 //Debug
POTLESS_2 19:31ac20c07bb2 423 Debug_Complet();
POTLESS_2 19:31ac20c07bb2 424
POTLESS_2 7:c5a5d8f678ff 425 //Data LOG
POTLESS_2 15:c9205e490740 426 if (NEED_SD_DATA_LOG == 1) DATA_LOG();
POTLESS_2 19:31ac20c07bb2 427
POTLESS_2 17:6e0c4c0e0fe2 428 //En accord avec app Android
POTLESS_2 19:31ac20c07bb2 429 build_send_Message_int("t", co2, ppO2);
POTLESS_2 19:31ac20c07bb2 430 build_send_Message_float("u", Temp1, Temp2);
POTLESS_2 19:31ac20c07bb2 431 build_send_Message_float("v", Humi, pression);
POTLESS_2 19:31ac20c07bb2 432 //build_send_Message_float("f", Servo1_POS, Servo2_POS);
POTLESS_2 13:aa620707126d 433 }
POTLESS_2 4:d84250f67dec 434 }
POTLESS_2 19:31ac20c07bb2 435
POTLESS_2 19:31ac20c07bb2 436 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 437 ////////////////////////////////////////////////////////////////////////////////