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:
Thu May 18 06:03:24 2017 +0000
Revision:
20:bb8d2cea2076
Parent:
19:31ac20c07bb2
Child:
21:28a3f60b4bc2
Version avec BLE, tft comment? pour que ?a marche, toutes les pin d?plac?es pour ?viter les croisements....A utiliser avec shiel carte sd et BLE...Pas en plus avec le TFT.

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