Ce programme correspond a la cellule de depart du systeme "Laser Gate Timer" developpe par Tanguy KESSELY et Dorian VOYDIE. Il utilise une carte Nucleo F411, un shield BLE IDB05A1 et un PCB fait maison

Dependencies:   mbed X_NUCLEO_IDB0XA1 BLE_API

Committer:
dorianvoydie
Date:
Thu Feb 04 16:04:14 2021 +0000
Revision:
15:040b2ce981f0
Parent:
14:ac6cbe6ffaab
Ce programme correspond a la cellule de depart du systeme "Laser Gate Timer" developpe par Tanguy KESSELY et Dorian VOYDIE. Il utilise une carte Nucleo F411, un shield BLE IDB05A1 et un PCB fait maison

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jimbaud 13:38d6b18040c7 1 #include "mbed.h"
jimbaud 13:38d6b18040c7 2 #include "ble/BLE.h"
jimbaud 13:38d6b18040c7 3 #include "ble/services/UARTService.h"
jimbaud 13:38d6b18040c7 4 #include "Serial.h"
jimbaud 13:38d6b18040c7 5 #include "stdlib.h"
jimbaud 13:38d6b18040c7 6
jimbaud 13:38d6b18040c7 7 #define UART_BUFFER (UARTService::BLE_UART_SERVICE_MAX_DATA_LEN)
jimbaud 13:38d6b18040c7 8
jimbaud 13:38d6b18040c7 9
dorianvoydie 15:040b2ce981f0 10 const static char DEVICE_NAME[] = "ObCP";
jimbaud 13:38d6b18040c7 11 UARTService *uartServicePtr;
jimbaud 13:38d6b18040c7 12
dorianvoydie 15:040b2ce981f0 13 ///////////Périphériques/////////////////
dorianvoydie 15:040b2ce981f0 14 InterruptIn myButton(USER_BUTTON);
dorianvoydie 15:040b2ce981f0 15 InterruptIn photodiode(A2);
dorianvoydie 15:040b2ce981f0 16 DigitalOut myled(LED1);
dorianvoydie 15:040b2ce981f0 17 DigitalOut laser(A3);
dorianvoydie 15:040b2ce981f0 18 DigitalIn photodiode1(A2);
dorianvoydie 15:040b2ce981f0 19 DigitalOut compteur(A4);
dorianvoydie 15:040b2ce981f0 20 float photodiode2 = 0;
jimbaud 13:38d6b18040c7 21
dorianvoydie 15:040b2ce981f0 22 ///////////Init devices//////////////////
dorianvoydie 15:040b2ce981f0 23 Serial device(D8, D2);
dorianvoydie 15:040b2ce981f0 24 Serial pc(USBTX, USBRX);
jimbaud 13:38d6b18040c7 25
dorianvoydie 15:040b2ce981f0 26 //////////Initialisations////////////////
dorianvoydie 15:040b2ce981f0 27 Timer timer_player_1;
dorianvoydie 15:040b2ce981f0 28 Timer timer_player_2;
dorianvoydie 15:040b2ce981f0 29 int begin1;
dorianvoydie 15:040b2ce981f0 30 int begin2;
dorianvoydie 15:040b2ce981f0 31 int end1;
dorianvoydie 15:040b2ce981f0 32 int end2;
dorianvoydie 15:040b2ce981f0 33 float chrono1;
dorianvoydie 15:040b2ce981f0 34 float chrono2;
dorianvoydie 15:040b2ce981f0 35 char temp=0;
dorianvoydie 15:040b2ce981f0 36 char temp2=0;
dorianvoydie 15:040b2ce981f0 37 char temp3=0;
dorianvoydie 15:040b2ce981f0 38 char gamemode = 'M';
dorianvoydie 15:040b2ce981f0 39
dorianvoydie 14:ac6cbe6ffaab 40 void Timer_Reset()
dorianvoydie 14:ac6cbe6ffaab 41 {
dorianvoydie 15:040b2ce981f0 42 timer_player_1.stop();
dorianvoydie 15:040b2ce981f0 43 timer_player_2.stop();
dorianvoydie 15:040b2ce981f0 44 timer_player_1.reset();
dorianvoydie 15:040b2ce981f0 45 timer_player_2.reset();
dorianvoydie 15:040b2ce981f0 46 begin1=0;
dorianvoydie 15:040b2ce981f0 47 begin2=0;
dorianvoydie 15:040b2ce981f0 48 end1=0;
dorianvoydie 15:040b2ce981f0 49 end2=0;
dorianvoydie 15:040b2ce981f0 50 chrono1=0;
dorianvoydie 15:040b2ce981f0 51 chrono2=0;
dorianvoydie 15:040b2ce981f0 52 }
dorianvoydie 15:040b2ce981f0 53
dorianvoydie 15:040b2ce981f0 54 void photodiode_triggered()
dorianvoydie 15:040b2ce981f0 55 {
dorianvoydie 15:040b2ce981f0 56 if (gamemode == 'S') {
dorianvoydie 15:040b2ce981f0 57 compteur = 1;
dorianvoydie 15:040b2ce981f0 58 wait(0.001);
dorianvoydie 15:040b2ce981f0 59 compteur = 0;
dorianvoydie 15:040b2ce981f0 60 Timer_Reset();
dorianvoydie 15:040b2ce981f0 61 timer_player_1.start();
dorianvoydie 15:040b2ce981f0 62 begin1 = timer_player_1.read_ms();
dorianvoydie 15:040b2ce981f0 63 myled=1;
dorianvoydie 15:040b2ce981f0 64 wait(0.5);
dorianvoydie 15:040b2ce981f0 65 myled=0;
dorianvoydie 15:040b2ce981f0 66
dorianvoydie 15:040b2ce981f0 67 }
dorianvoydie 15:040b2ce981f0 68 if (gamemode == 'D') {
dorianvoydie 15:040b2ce981f0 69 wait(0.001);
dorianvoydie 15:040b2ce981f0 70 compteur = 0;
dorianvoydie 15:040b2ce981f0 71 end2 = timer_player_2.read_ms();
dorianvoydie 15:040b2ce981f0 72 timer_player_2.stop();
dorianvoydie 15:040b2ce981f0 73 chrono2 = end2-begin2;
dorianvoydie 15:040b2ce981f0 74 }
dorianvoydie 15:040b2ce981f0 75 if (gamemode == 'L') {
dorianvoydie 15:040b2ce981f0 76 wait(0.001);
dorianvoydie 15:040b2ce981f0 77 compteur = 0;
dorianvoydie 15:040b2ce981f0 78 timer_player_1.start();
dorianvoydie 15:040b2ce981f0 79 chrono1 = timer_player_1.read_ms();
dorianvoydie 15:040b2ce981f0 80 myled=1;
dorianvoydie 15:040b2ce981f0 81 wait(0.5);
dorianvoydie 15:040b2ce981f0 82 myled=0;
dorianvoydie 15:040b2ce981f0 83 }
dorianvoydie 14:ac6cbe6ffaab 84 }
dorianvoydie 14:ac6cbe6ffaab 85 /////////////////////////////////////
dorianvoydie 14:ac6cbe6ffaab 86
dorianvoydie 14:ac6cbe6ffaab 87
dorianvoydie 14:ac6cbe6ffaab 88 /////////COMMUNICATION///////////////
dorianvoydie 15:040b2ce981f0 89 void device_receive()
dorianvoydie 14:ac6cbe6ffaab 90 {
dorianvoydie 15:040b2ce981f0 91 temp=device.getc();
dorianvoydie 15:040b2ce981f0 92 //Ignore Sync pattern and do not pass on to PC
dorianvoydie 15:040b2ce981f0 93 if (temp!=0xAA) {
dorianvoydie 15:040b2ce981f0 94 //Mode solo, la cellule arrivée envoie u à la cellule départ
dorianvoydie 15:040b2ce981f0 95 if(temp == 0xBB and temp2!=0xBB) {
dorianvoydie 15:040b2ce981f0 96 temp2=0xBB;
dorianvoydie 15:040b2ce981f0 97 }
dorianvoydie 15:040b2ce981f0 98 if(temp == 0xBC and temp2==0xBB) {
dorianvoydie 15:040b2ce981f0 99 temp3 = 0xBC;
dorianvoydie 15:040b2ce981f0 100 }
dorianvoydie 15:040b2ce981f0 101 if(temp == 0xBD and temp3==0xBC) {
dorianvoydie 15:040b2ce981f0 102 end1 = timer_player_1.read_ms();
dorianvoydie 15:040b2ce981f0 103 timer_player_1.stop();
dorianvoydie 15:040b2ce981f0 104 chrono1 = end1-begin1-0.02;
dorianvoydie 15:040b2ce981f0 105 photodiode2 = 0;
dorianvoydie 15:040b2ce981f0 106 pc.printf("C'est bon");
dorianvoydie 15:040b2ce981f0 107 }
dorianvoydie 15:040b2ce981f0 108 if(temp == 0xCC) {
dorianvoydie 15:040b2ce981f0 109 photodiode2 = 1;
dorianvoydie 15:040b2ce981f0 110 }
dorianvoydie 15:040b2ce981f0 111 pc.putc(temp);
dorianvoydie 15:040b2ce981f0 112 }
dorianvoydie 14:ac6cbe6ffaab 113
dorianvoydie 15:040b2ce981f0 114
dorianvoydie 14:ac6cbe6ffaab 115 }
dorianvoydie 14:ac6cbe6ffaab 116 /////////////////////////////////////
dorianvoydie 14:ac6cbe6ffaab 117
dorianvoydie 14:ac6cbe6ffaab 118
jimbaud 13:38d6b18040c7 119 // Tableau et index de communication avec UART
jimbaud 13:38d6b18040c7 120 static char uartBuff[UART_BUFFER];
jimbaud 13:38d6b18040c7 121 // Routine de traitement des erreurs
jimbaud 13:38d6b18040c7 122 void onBleError(ble_error_t error);
jimbaud 13:38d6b18040c7 123
jimbaud 13:38d6b18040c7 124 /****************************************************/
jimbaud 13:38d6b18040c7 125 /* Ticker actif lorsque la connexion BLE est présente */
jimbaud 13:38d6b18040c7 126 /****************************************************/
dorianvoydie 15:040b2ce981f0 127 void ConnectedBLE(void)
dorianvoydie 15:040b2ce981f0 128 {
dorianvoydie 15:040b2ce981f0 129 // Signal de vie: allumer et éteindre la LED
dorianvoydie 15:040b2ce981f0 130
dorianvoydie 15:040b2ce981f0 131 }
jimbaud 13:38d6b18040c7 132
dorianvoydie 14:ac6cbe6ffaab 133 void update(void)
jimbaud 13:38d6b18040c7 134 {
dorianvoydie 15:040b2ce981f0 135
dorianvoydie 15:040b2ce981f0 136 if (gamemode != 'A') {
dorianvoydie 15:040b2ce981f0 137 char train1[5];
dorianvoydie 15:040b2ce981f0 138 char train2[5];
dorianvoydie 15:040b2ce981f0 139 float chrono_value_J1 = float(chrono1)* 0.001F;
dorianvoydie 15:040b2ce981f0 140 float chrono_value_J2 = float(chrono2)* 0.001F;
jimbaud 13:38d6b18040c7 141
dorianvoydie 15:040b2ce981f0 142 //Transformation des valeurs numeriques en chaine de caracteres
dorianvoydie 15:040b2ce981f0 143 sprintf(train1,"%5.2f",chrono_value_J1);
dorianvoydie 15:040b2ce981f0 144 sprintf(train2,"%5.2f",chrono_value_J2);
dorianvoydie 15:040b2ce981f0 145 //Integre les trois chaines de caractere contenant les ts dans la chaine uartBuff
dorianvoydie 15:040b2ce981f0 146 sprintf(uartBuff, "%s %s", train1, train2) ;
dorianvoydie 15:040b2ce981f0 147 //Envoie la chaine uartBuff sur le sevice TX UART BLE
dorianvoydie 15:040b2ce981f0 148 uartServicePtr->write(uartBuff, UARTService::BLE_UART_SERVICE_MAX_DATA_LEN);
dorianvoydie 15:040b2ce981f0 149 // Réinitialiser la chaîne uartBuff en entrant 0 dans les premiers caractères UART_BUFFER
dorianvoydie 15:040b2ce981f0 150 memset(uartBuff, 0, UART_BUFFER);
dorianvoydie 15:040b2ce981f0 151 } else {
dorianvoydie 15:040b2ce981f0 152 char laser1[1];
dorianvoydie 15:040b2ce981f0 153 char laser2[1];
dorianvoydie 15:040b2ce981f0 154
dorianvoydie 15:040b2ce981f0 155 //Transformation des valeurs numeriques en chaine de caracteres
dorianvoydie 15:040b2ce981f0 156 float meas = photodiode1.read();
dorianvoydie 15:040b2ce981f0 157 sprintf(laser1,"%1.0f",meas);
dorianvoydie 15:040b2ce981f0 158 sprintf(laser2,"%1.0f",photodiode2);
dorianvoydie 15:040b2ce981f0 159 //Integre les trois chaines de caractere contenant les ts dans la chaine uartBuff
dorianvoydie 15:040b2ce981f0 160 sprintf(uartBuff, "%s %s", laser1, laser2) ;
dorianvoydie 15:040b2ce981f0 161 //Envoie la chaine uartBuff sur le sevice TX UART BLE
dorianvoydie 15:040b2ce981f0 162 uartServicePtr->write(uartBuff, UARTService::BLE_UART_SERVICE_MAX_DATA_LEN);
dorianvoydie 15:040b2ce981f0 163 // Réinitialiser la chaîne uartBuff en entrant 0 dans les premiers caractères UART_BUFFER
dorianvoydie 15:040b2ce981f0 164 memset(uartBuff, 0, UART_BUFFER);
dorianvoydie 15:040b2ce981f0 165 }
dorianvoydie 15:040b2ce981f0 166
jimbaud 13:38d6b18040c7 167
jimbaud 13:38d6b18040c7 168 }
jimbaud 13:38d6b18040c7 169
jimbaud 13:38d6b18040c7 170 /*************************/
jimbaud 13:38d6b18040c7 171 /* Connexion BLE réussie */
jimbaud 13:38d6b18040c7 172 /*************************/
jimbaud 13:38d6b18040c7 173 void BleConnectionCallback(const Gap::ConnectionCallbackParams_t *params)
jimbaud 13:38d6b18040c7 174 {
dorianvoydie 15:040b2ce981f0 175 // Signal de connexion BLE: allume / éteint la LED avec une période de 1 seconde
dorianvoydie 15:040b2ce981f0 176 ConnectedBLE();
jimbaud 13:38d6b18040c7 177 }
jimbaud 13:38d6b18040c7 178
jimbaud 13:38d6b18040c7 179 /*****************************/
jimbaud 13:38d6b18040c7 180 /* Déconnexion du client BLE */
jimbaud 13:38d6b18040c7 181 /*****************************/
jimbaud 13:38d6b18040c7 182 void BleDisconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
jimbaud 13:38d6b18040c7 183 {
jimbaud 13:38d6b18040c7 184 (void)params;
jimbaud 13:38d6b18040c7 185 // Redémarrer la publicité
dorianvoydie 14:ac6cbe6ffaab 186 Timer_Reset();
jimbaud 13:38d6b18040c7 187 BLE::Instance().gap().startAdvertising();
dorianvoydie 15:040b2ce981f0 188
dorianvoydie 15:040b2ce981f0 189
jimbaud 13:38d6b18040c7 190 }
jimbaud 13:38d6b18040c7 191
jimbaud 13:38d6b18040c7 192 /***************************/
jimbaud 13:38d6b18040c7 193 /* Rx de BLE et Rx vers USB*/
jimbaud 13:38d6b18040c7 194 /***************************/
jimbaud 13:38d6b18040c7 195 void BleOnDataWrittenCallback(const GattWriteCallbackParams *params)
jimbaud 13:38d6b18040c7 196 {
jimbaud 13:38d6b18040c7 197 char reception[UART_BUFFER];
dorianvoydie 14:ac6cbe6ffaab 198 char commande[3];
jimbaud 13:38d6b18040c7 199 if (params->handle == uartServicePtr->getTXCharacteristicHandle()) {
jimbaud 13:38d6b18040c7 200 // Copie de la chaine reçue dans reception
jimbaud 13:38d6b18040c7 201 sprintf(reception,"%s", params->data);
jimbaud 13:38d6b18040c7 202 // Copie dans la chaine commande des deux premier caracteres de la chaine reception
dorianvoydie 14:ac6cbe6ffaab 203 sprintf(commande,"%c%c%c", reception[0], reception[1], reception[2]);
dorianvoydie 15:040b2ce981f0 204
dorianvoydie 15:040b2ce981f0 205 if( strcmp(commande, "RST" )==0 ) {
dorianvoydie 14:ac6cbe6ffaab 206 Timer_Reset();
dorianvoydie 14:ac6cbe6ffaab 207 update();
jimbaud 13:38d6b18040c7 208 }
dorianvoydie 15:040b2ce981f0 209 if( strcmp(commande, "SOL" )==0 ) {
dorianvoydie 15:040b2ce981f0 210 gamemode = 'S';
dorianvoydie 15:040b2ce981f0 211 laser=1;
dorianvoydie 15:040b2ce981f0 212 update();
dorianvoydie 15:040b2ce981f0 213 }
dorianvoydie 15:040b2ce981f0 214 if( strcmp(commande, "DUO" )==0 ) {
dorianvoydie 15:040b2ce981f0 215 gamemode = 'D';
dorianvoydie 15:040b2ce981f0 216 laser=1;
dorianvoydie 15:040b2ce981f0 217 update();
dorianvoydie 15:040b2ce981f0 218 }
dorianvoydie 15:040b2ce981f0 219 if( strcmp(commande, "LAP" )==0 ) {
dorianvoydie 15:040b2ce981f0 220 gamemode = 'L';
dorianvoydie 15:040b2ce981f0 221 laser=1;
dorianvoydie 15:040b2ce981f0 222 update();
dorianvoydie 15:040b2ce981f0 223 }
dorianvoydie 15:040b2ce981f0 224 if( strcmp(commande, "MEN" )==0 ) {
dorianvoydie 15:040b2ce981f0 225 gamemode = 'M';
dorianvoydie 15:040b2ce981f0 226 laser=0;
dorianvoydie 15:040b2ce981f0 227 update();
dorianvoydie 15:040b2ce981f0 228 }
dorianvoydie 15:040b2ce981f0 229 if( strcmp(commande, "LAS" )==0 ) {
dorianvoydie 15:040b2ce981f0 230 gamemode = 'A';
dorianvoydie 15:040b2ce981f0 231 laser=1;
dorianvoydie 15:040b2ce981f0 232 update();
dorianvoydie 15:040b2ce981f0 233 }
dorianvoydie 15:040b2ce981f0 234 if( strcmp(commande, "BIP" )==0 ) {
dorianvoydie 15:040b2ce981f0 235 Timer_Reset();
dorianvoydie 15:040b2ce981f0 236 timer_player_1.start();
dorianvoydie 15:040b2ce981f0 237 timer_player_2.start();
dorianvoydie 15:040b2ce981f0 238 begin1 = timer_player_1.read_ms();
dorianvoydie 15:040b2ce981f0 239 begin1 = timer_player_2.read_ms();
dorianvoydie 15:040b2ce981f0 240 myled=1;
dorianvoydie 15:040b2ce981f0 241 wait(0.5);
dorianvoydie 15:040b2ce981f0 242 myled=0;
dorianvoydie 15:040b2ce981f0 243 }
jimbaud 13:38d6b18040c7 244 }
jimbaud 13:38d6b18040c7 245 }
jimbaud 13:38d6b18040c7 246
jimbaud 13:38d6b18040c7 247 /***************************/
jimbaud 13:38d6b18040c7 248 /* Erreur sur le canal BLE */
jimbaud 13:38d6b18040c7 249 /***************************/
jimbaud 13:38d6b18040c7 250
jimbaud 13:38d6b18040c7 251 void onBleError(ble_error_t error)
jimbaud 13:38d6b18040c7 252 {
jimbaud 13:38d6b18040c7 253 /* Entrer le traitement des erreurs */
jimbaud 13:38d6b18040c7 254 }
jimbaud 13:38d6b18040c7 255
jimbaud 13:38d6b18040c7 256 /**************************************/
jimbaud 13:38d6b18040c7 257 /* Initialisation du service BLE UART */
jimbaud 13:38d6b18040c7 258 /**************************************/
jimbaud 13:38d6b18040c7 259
jimbaud 13:38d6b18040c7 260 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
jimbaud 13:38d6b18040c7 261 {
jimbaud 13:38d6b18040c7 262 BLE& ble = params->ble;
jimbaud 13:38d6b18040c7 263 ble_error_t error = params->error;
jimbaud 13:38d6b18040c7 264
jimbaud 13:38d6b18040c7 265 if (error != BLE_ERROR_NONE) {
jimbaud 13:38d6b18040c7 266
jimbaud 13:38d6b18040c7 267 /* En cas d'erreur, transmettez le traitement d'erreur à onBleInitError*/
jimbaud 13:38d6b18040c7 268 onBleError(error);
jimbaud 13:38d6b18040c7 269 return;
jimbaud 13:38d6b18040c7 270 }
jimbaud 13:38d6b18040c7 271
jimbaud 13:38d6b18040c7 272 /* Assurez-vous qu'il s'agit de l'instance par défaut de BLE */
jimbaud 13:38d6b18040c7 273 if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) {
jimbaud 13:38d6b18040c7 274 return;
jimbaud 13:38d6b18040c7 275 }
jimbaud 13:38d6b18040c7 276
jimbaud 13:38d6b18040c7 277 ble.gap().onConnection(BleConnectionCallback);
jimbaud 13:38d6b18040c7 278 ble.gap().onDisconnection(BleDisconnectionCallback);
jimbaud 13:38d6b18040c7 279 ble.gattServer().onDataWritten(BleOnDataWrittenCallback);
jimbaud 13:38d6b18040c7 280
jimbaud 13:38d6b18040c7 281 /* Configuration du service primaire. */
jimbaud 13:38d6b18040c7 282 UARTService uartService(ble);
jimbaud 13:38d6b18040c7 283 uartServicePtr = &uartService;
jimbaud 13:38d6b18040c7 284
jimbaud 13:38d6b18040c7 285 /* Configurer la publicité */
jimbaud 13:38d6b18040c7 286 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
jimbaud 13:38d6b18040c7 287 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
jimbaud 13:38d6b18040c7 288 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
jimbaud 13:38d6b18040c7 289 ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
jimbaud 13:38d6b18040c7 290 ble.gap().setAdvertisingInterval(500); /* 500ms. */
jimbaud 13:38d6b18040c7 291 ble.gap().startAdvertising();
jimbaud 13:38d6b18040c7 292
jimbaud 13:38d6b18040c7 293 // Attend les événements sur BLE
jimbaud 13:38d6b18040c7 294 while (true) {
dorianvoydie 15:040b2ce981f0 295
jimbaud 13:38d6b18040c7 296 ble.waitForEvent();
dorianvoydie 14:ac6cbe6ffaab 297 update();
dorianvoydie 15:040b2ce981f0 298 //RF Receive Code
dorianvoydie 15:040b2ce981f0 299 device_receive();
dorianvoydie 14:ac6cbe6ffaab 300 wait(0.01);
jimbaud 13:38d6b18040c7 301 }
jimbaud 13:38d6b18040c7 302 }
jimbaud 13:38d6b18040c7 303
jimbaud 13:38d6b18040c7 304 /********/
jimbaud 13:38d6b18040c7 305 /* MAIN */
jimbaud 13:38d6b18040c7 306 /********/
jimbaud 13:38d6b18040c7 307 int main(void)
jimbaud 13:38d6b18040c7 308 {
dorianvoydie 15:040b2ce981f0 309 device.baud(2400);
dorianvoydie 15:040b2ce981f0 310 myButton.fall(&photodiode_triggered);
dorianvoydie 15:040b2ce981f0 311 photodiode.fall(&photodiode_triggered);
dorianvoydie 15:040b2ce981f0 312
jimbaud 13:38d6b18040c7 313
jimbaud 13:38d6b18040c7 314 /****** START Initialiser BLE **********/
jimbaud 13:38d6b18040c7 315 BLE &ble = BLE::Instance();
jimbaud 13:38d6b18040c7 316 ble.init(bleInitComplete);
jimbaud 13:38d6b18040c7 317 /******* FIN initialise BLE ***********/
jimbaud 13:38d6b18040c7 318 }
jimbaud 13:38d6b18040c7 319