Dependencies:   mbed X_NUCLEO_IDB0XA1 BLE_API

Committer:
pinofal
Date:
Sat Mar 02 11:49:03 2019 +0000
Revision:
11:ba885131ca2c
MegaPi

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pinofal 11:ba885131ca2c 1 // Tested: NUCLEO-F401RE
pinofal 11:ba885131ca2c 2
pinofal 11:ba885131ca2c 3 #include "mbed.h"
pinofal 11:ba885131ca2c 4 #include "ble/BLE.h"
pinofal 11:ba885131ca2c 5 #include "ble/services/UARTService.h"
pinofal 11:ba885131ca2c 6 #include "Serial.h"
pinofal 11:ba885131ca2c 7
pinofal 11:ba885131ca2c 8 #define UART_BUFFER (UARTService::BLE_UART_SERVICE_MAX_DATA_LEN*10)
pinofal 11:ba885131ca2c 9
pinofal 11:ba885131ca2c 10 const static char DEVICE_NAME[] = "UART";
pinofal 11:ba885131ca2c 11 UARTService *uartServicePtr;
pinofal 11:ba885131ca2c 12
pinofal 11:ba885131ca2c 13 // Periferiche
pinofal 11:ba885131ca2c 14 DigitalOut Led1(LED1); // LED su scheda
pinofal 11:ba885131ca2c 15 Serial pcUSB(USBTX,USBRX); // USB di comunicazione con PC
pinofal 11:ba885131ca2c 16 DigitalOut myLED(PB_2); //LED aggiunto esternamente
pinofal 11:ba885131ca2c 17 DigitalIn myButton(USER_BUTTON); // USER BUTTON su scheda
pinofal 11:ba885131ca2c 18 DigitalOut myRelay(PA_15); // Relay Esterno
pinofal 11:ba885131ca2c 19
pinofal 11:ba885131ca2c 20 DigitalIn InNE1 (PA_4); // Input per acquisire i segnali NET1 in output dall'encoder sul motore
pinofal 11:ba885131ca2c 21 DigitalOut OutBI1 (PC_1); // Output 1 per pilotaggio input BI1 del Motore B
pinofal 11:ba885131ca2c 22 DigitalOut OutBI2 (PC_0); // Output 2 per pilotaggio input BI2 del Motore B
pinofal 11:ba885131ca2c 23 DigitalOut OutPWB (PB_0); // Output per pilotaggio input PWM del motore B
pinofal 11:ba885131ca2c 24
pinofal 11:ba885131ca2c 25
pinofal 11:ba885131ca2c 26
pinofal 11:ba885131ca2c 27 // Array e indice di comunicazione con UART
pinofal 11:ba885131ca2c 28 static uint8_t uartBuff[UART_BUFFER];
pinofal 11:ba885131ca2c 29 static uint8_t uartBuffPos=0;
pinofal 11:ba885131ca2c 30
pinofal 11:ba885131ca2c 31 // routine di Error Handling
pinofal 11:ba885131ca2c 32 void onBleError(ble_error_t error);
pinofal 11:ba885131ca2c 33
pinofal 11:ba885131ca2c 34
pinofal 11:ba885131ca2c 35 // Ticker segnale di vita
pinofal 11:ba885131ca2c 36 Ticker LifeTicker;
pinofal 11:ba885131ca2c 37
pinofal 11:ba885131ca2c 38
pinofal 11:ba885131ca2c 39
pinofal 11:ba885131ca2c 40 /****************************************************/
pinofal 11:ba885131ca2c 41 /* Ticker attivo quando presente la connessione BLE */
pinofal 11:ba885131ca2c 42 /****************************************************/
pinofal 11:ba885131ca2c 43 void ConnectedBLE(void)
pinofal 11:ba885131ca2c 44 {
pinofal 11:ba885131ca2c 45 // segnale di vita: accende e spegne il LED
pinofal 11:ba885131ca2c 46 Led1 = !Led1;
pinofal 11:ba885131ca2c 47 }
pinofal 11:ba885131ca2c 48
pinofal 11:ba885131ca2c 49 /************************/
pinofal 11:ba885131ca2c 50 /* Rx da USB e Tx a BLE */
pinofal 11:ba885131ca2c 51 /************************/
pinofal 11:ba885131ca2c 52 void uartRx(void)
pinofal 11:ba885131ca2c 53 {
pinofal 11:ba885131ca2c 54 // cattura i caratteri dalla USB fino alla fine del messaggio: a '\r' oppure '\n' oppure fino al raggiungimento della massima dimensione del messaggio
pinofal 11:ba885131ca2c 55 if(pcUSB.readable())
pinofal 11:ba885131ca2c 56 {
pinofal 11:ba885131ca2c 57 uartBuff[uartBuffPos] = pcUSB.getc();
pinofal 11:ba885131ca2c 58 if((uartBuff[uartBuffPos] == '\r') || (uartBuff[uartBuffPos] == '\n') || (uartBuffPos >= UART_BUFFER))
pinofal 11:ba885131ca2c 59 {
pinofal 11:ba885131ca2c 60 // inserisce un NUL nell'ultima posizine della stringa
pinofal 11:ba885131ca2c 61 uartBuff[uartBuffPos] = '\0';
pinofal 11:ba885131ca2c 62 // We are sending the whole string even if less than BLE_UART_SERVICE_MAX_DATA_LEN, otherwise we need to wait
pinofal 11:ba885131ca2c 63 uartServicePtr->write(uartBuff, (uartBuffPos/UARTService::BLE_UART_SERVICE_MAX_DATA_LEN +1) * UARTService::BLE_UART_SERVICE_MAX_DATA_LEN);
pinofal 11:ba885131ca2c 64 // invia conferma alla USB-PC con la stringa inviata al BLE
pinofal 11:ba885131ca2c 65 pcUSB.printf("TX : %s to BLE\r\n", uartBuff);
pinofal 11:ba885131ca2c 66 // resetta la stringa uartBuff inserendo 0 ai primi UART_BUFFER caratteri
pinofal 11:ba885131ca2c 67 memset(uartBuff, 0, UART_BUFFER);
pinofal 11:ba885131ca2c 68 uartBuffPos = 0;
pinofal 11:ba885131ca2c 69 }
pinofal 11:ba885131ca2c 70 else
pinofal 11:ba885131ca2c 71 {
pinofal 11:ba885131ca2c 72 // se non è stata raggiunta la fine del messaggio, incrementa il contatore per ricevere il prossimo carattere
pinofal 11:ba885131ca2c 73 uartBuffPos++;
pinofal 11:ba885131ca2c 74 }
pinofal 11:ba885131ca2c 75 }
pinofal 11:ba885131ca2c 76 }
pinofal 11:ba885131ca2c 77
pinofal 11:ba885131ca2c 78 /*****************************************/
pinofal 11:ba885131ca2c 79 /* Connessione BLE avvenuta con successo */
pinofal 11:ba885131ca2c 80 /*****************************************/
pinofal 11:ba885131ca2c 81 void BleConnectionCallback(const Gap::ConnectionCallbackParams_t *params)
pinofal 11:ba885131ca2c 82 {
pinofal 11:ba885131ca2c 83 pcUSB.printf("BLE Client Connected!\n\r");
pinofal 11:ba885131ca2c 84 pcUSB.printf("Please type a string and press return\r\n");
pinofal 11:ba885131ca2c 85
pinofal 11:ba885131ca2c 86 // segnale di connessione BLE: accende/spegne il LED con periodo 1sec
pinofal 11:ba885131ca2c 87 LifeTicker.attach(ConnectedBLE, 1);
pinofal 11:ba885131ca2c 88 }
pinofal 11:ba885131ca2c 89
pinofal 11:ba885131ca2c 90 /**********************************/
pinofal 11:ba885131ca2c 91 /* disconnessione del Cliente BLE */
pinofal 11:ba885131ca2c 92 /**********************************/
pinofal 11:ba885131ca2c 93 void BleDisconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
pinofal 11:ba885131ca2c 94 {
pinofal 11:ba885131ca2c 95 (void)params;
pinofal 11:ba885131ca2c 96 pcUSB.printf("BLE Client Disconnected!\r\n");
pinofal 11:ba885131ca2c 97 // spegne il segnale di connessione BLE: accende/spegne il LED con periodo 1sec
pinofal 11:ba885131ca2c 98 LifeTicker.detach();
pinofal 11:ba885131ca2c 99
pinofal 11:ba885131ca2c 100 // restart advertising
pinofal 11:ba885131ca2c 101 BLE::Instance().gap().startAdvertising();
pinofal 11:ba885131ca2c 102 Led1=0;
pinofal 11:ba885131ca2c 103 }
pinofal 11:ba885131ca2c 104
pinofal 11:ba885131ca2c 105 /************************/
pinofal 11:ba885131ca2c 106 /* Rx da BLE e Rx a USB */
pinofal 11:ba885131ca2c 107 /************************/
pinofal 11:ba885131ca2c 108 void BleOnDataWrittenCallback(const GattWriteCallbackParams *params)
pinofal 11:ba885131ca2c 109 {
pinofal 11:ba885131ca2c 110 // Stringa di risposta in caso di ricezione not OK
pinofal 11:ba885131ca2c 111 #define REPLYNOTOK "Rx not Ok :("
pinofal 11:ba885131ca2c 112 // Stringa di risposta in caso di ricezione OK
pinofal 11:ba885131ca2c 113 #define REPLYOK "Rx Ok :)"
pinofal 11:ba885131ca2c 114 // Stringa di riferimento
pinofal 11:ba885131ca2c 115 #define REFERENCESTRING "bho"
pinofal 11:ba885131ca2c 116
pinofal 11:ba885131ca2c 117 char caReply[UART_BUFFER];
pinofal 11:ba885131ca2c 118 //uint8_t uaAux[UART_BUFFER];
pinofal 11:ba885131ca2c 119 int nReplyLength;
pinofal 11:ba885131ca2c 120
pinofal 11:ba885131ca2c 121 //Risultato del confronto tra stringhe
pinofal 11:ba885131ca2c 122 int nResult;
pinofal 11:ba885131ca2c 123
pinofal 11:ba885131ca2c 124 // resetta stringa ausiliaria per comporre le risposte
pinofal 11:ba885131ca2c 125 memset(caReply, 0, UART_BUFFER);
pinofal 11:ba885131ca2c 126
pinofal 11:ba885131ca2c 127 // riceve stringa da BLE
pinofal 11:ba885131ca2c 128 if (params->handle == uartServicePtr->getTXCharacteristicHandle())
pinofal 11:ba885131ca2c 129 {
pinofal 11:ba885131ca2c 130 // invia al PC la stringa ricevuta
pinofal 11:ba885131ca2c 131 pcUSB.printf("RX: %s from BLE\r\n", params->data);
pinofal 11:ba885131ca2c 132
pinofal 11:ba885131ca2c 133 //confronta la stringa ricevuta con una stringa di riferimento
pinofal 11:ba885131ca2c 134 nResult=strcmp((char*)(params->data),REFERENCESTRING);
pinofal 11:ba885131ca2c 135 nResult= 0;
pinofal 11:ba885131ca2c 136 if(nResult==0) // ==0 in caso di confronto di stringhe con esito positivo
pinofal 11:ba885131ca2c 137 {
pinofal 11:ba885131ca2c 138 // se la stringa ricevuta è uguale a quella di riferimento, accende LED
pinofal 11:ba885131ca2c 139 myLED = 1; // accendi LED
pinofal 11:ba885131ca2c 140 myRelay = 1; // accendi Relay
pinofal 11:ba885131ca2c 141
pinofal 11:ba885131ca2c 142 // comunica al PC l'azione eseguita
pinofal 11:ba885131ca2c 143 pcUSB.printf("Relay = ON ; LED = ON \r\n");
pinofal 11:ba885131ca2c 144
pinofal 11:ba885131ca2c 145 // Aggiunge NULL alla stringa di risposta OK
pinofal 11:ba885131ca2c 146 strcpy(caReply,REPLYOK);
pinofal 11:ba885131ca2c 147 nReplyLength = strlen(REPLYOK);
pinofal 11:ba885131ca2c 148 caReply[nReplyLength]='\0';
pinofal 11:ba885131ca2c 149
pinofal 11:ba885131ca2c 150 // We are sending the whole string even if less than BLE_UART_SERVICE_MAX_DATA_LEN, otherwise we need to wait
pinofal 11:ba885131ca2c 151 uartServicePtr->write(caReply, (nReplyLength/UARTService::BLE_UART_SERVICE_MAX_DATA_LEN +1) * UARTService::BLE_UART_SERVICE_MAX_DATA_LEN);
pinofal 11:ba885131ca2c 152
pinofal 11:ba885131ca2c 153 // accendi il motore CW alla massima velocità
pinofal 11:ba885131ca2c 154 OutPWB = 1;
pinofal 11:ba885131ca2c 155 OutBI1 = 1;
pinofal 11:ba885131ca2c 156 OutBI2 = 0;
pinofal 11:ba885131ca2c 157
pinofal 11:ba885131ca2c 158 wait(2);
pinofal 11:ba885131ca2c 159
pinofal 11:ba885131ca2c 160 // spegni il motore
pinofal 11:ba885131ca2c 161 OutPWB = 1;
pinofal 11:ba885131ca2c 162 OutBI1 = 0;
pinofal 11:ba885131ca2c 163 OutBI2 = 0;
pinofal 11:ba885131ca2c 164
pinofal 11:ba885131ca2c 165 wait(2);
pinofal 11:ba885131ca2c 166
pinofal 11:ba885131ca2c 167 // accendi il motore CCW alla massima velocità
pinofal 11:ba885131ca2c 168 OutPWB = 1;
pinofal 11:ba885131ca2c 169 OutBI1 = 0;
pinofal 11:ba885131ca2c 170 OutBI2 = 1;
pinofal 11:ba885131ca2c 171
pinofal 11:ba885131ca2c 172 wait(2);
pinofal 11:ba885131ca2c 173
pinofal 11:ba885131ca2c 174 // spegni il motore
pinofal 11:ba885131ca2c 175 OutPWB = 1;
pinofal 11:ba885131ca2c 176 OutBI1 = 0;
pinofal 11:ba885131ca2c 177 OutBI2 = 0;
pinofal 11:ba885131ca2c 178 }
pinofal 11:ba885131ca2c 179 else
pinofal 11:ba885131ca2c 180 {
pinofal 11:ba885131ca2c 181 // se la stringa ricevuta è diversa da quella di riferimento, spegne LED
pinofal 11:ba885131ca2c 182 myLED = 0; // spegni LED
pinofal 11:ba885131ca2c 183 myRelay = 0; // spegni Relay
pinofal 11:ba885131ca2c 184
pinofal 11:ba885131ca2c 185 // comunica al PC l'azione eseguita
pinofal 11:ba885131ca2c 186 pcUSB.printf("Relay = OFF ; LED = OFF \r\n");
pinofal 11:ba885131ca2c 187
pinofal 11:ba885131ca2c 188 // Aggiunge NULL alla stringa di risposta NOT OK
pinofal 11:ba885131ca2c 189 strcpy(caReply,REPLYNOTOK);
pinofal 11:ba885131ca2c 190 nReplyLength = strlen(REPLYNOTOK);
pinofal 11:ba885131ca2c 191 caReply[nReplyLength]='\0';
pinofal 11:ba885131ca2c 192
pinofal 11:ba885131ca2c 193 // We are sending the whole string even if less than BLE_UART_SERVICE_MAX_DATA_LEN, otherwise we need to wait
pinofal 11:ba885131ca2c 194 uartServicePtr->write(caReply, (nReplyLength/UARTService::BLE_UART_SERVICE_MAX_DATA_LEN +1) * UARTService::BLE_UART_SERVICE_MAX_DATA_LEN);
pinofal 11:ba885131ca2c 195
pinofal 11:ba885131ca2c 196 // spegni il motore
pinofal 11:ba885131ca2c 197 OutPWB = 1;
pinofal 11:ba885131ca2c 198 OutBI1 = 0;
pinofal 11:ba885131ca2c 199 OutBI2 = 0;
pinofal 11:ba885131ca2c 200
pinofal 11:ba885131ca2c 201
pinofal 11:ba885131ca2c 202 }
pinofal 11:ba885131ca2c 203 // !!! PROVARE A INSERIRE IL CASE OF DELL'ESERCIZIO 5
pinofal 11:ba885131ca2c 204 // !!!!! PROVARE in questo punto a inviare un feedback al BLE !!!!!!!
pinofal 11:ba885131ca2c 205 // !!!! uartServicePtr->write(uartBuff, (uartBuffPos/UARTService::BLE_UART_SERVICE_MAX_DATA_LEN +1) * UARTService::BLE_UART_SERVICE_MAX_DATA_LEN);
pinofal 11:ba885131ca2c 206
pinofal 11:ba885131ca2c 207 }
pinofal 11:ba885131ca2c 208 }
pinofal 11:ba885131ca2c 209
pinofal 11:ba885131ca2c 210 /************************/
pinofal 11:ba885131ca2c 211 /* Errore su canale BLE */
pinofal 11:ba885131ca2c 212 /************************/
pinofal 11:ba885131ca2c 213 void onBleError(ble_error_t error)
pinofal 11:ba885131ca2c 214 {
pinofal 11:ba885131ca2c 215 pcUSB.printf("BLE Error: %d\r\n",10);
pinofal 11:ba885131ca2c 216 /* Inserire Handling di errore */
pinofal 11:ba885131ca2c 217 }
pinofal 11:ba885131ca2c 218
pinofal 11:ba885131ca2c 219 /******************************************/
pinofal 11:ba885131ca2c 220 /* Inizializzazione del servizio BLE UART */
pinofal 11:ba885131ca2c 221 /******************************************/
pinofal 11:ba885131ca2c 222 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
pinofal 11:ba885131ca2c 223 {
pinofal 11:ba885131ca2c 224 BLE& ble = params->ble;
pinofal 11:ba885131ca2c 225 ble_error_t error = params->error;
pinofal 11:ba885131ca2c 226
pinofal 11:ba885131ca2c 227 if (error != BLE_ERROR_NONE)
pinofal 11:ba885131ca2c 228 {
pinofal 11:ba885131ca2c 229 /* In case of error, forward the error handling to onBleInitError */
pinofal 11:ba885131ca2c 230 onBleError(error);
pinofal 11:ba885131ca2c 231 return;
pinofal 11:ba885131ca2c 232 }
pinofal 11:ba885131ca2c 233
pinofal 11:ba885131ca2c 234 /* Ensure that it is the default instance of BLE */
pinofal 11:ba885131ca2c 235 if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE)
pinofal 11:ba885131ca2c 236 {
pinofal 11:ba885131ca2c 237 return;
pinofal 11:ba885131ca2c 238 }
pinofal 11:ba885131ca2c 239
pinofal 11:ba885131ca2c 240 ble.gap().onConnection(BleConnectionCallback);
pinofal 11:ba885131ca2c 241 ble.gap().onDisconnection(BleDisconnectionCallback);
pinofal 11:ba885131ca2c 242 ble.gattServer().onDataWritten(BleOnDataWrittenCallback);
pinofal 11:ba885131ca2c 243
pinofal 11:ba885131ca2c 244 pcUSB.printf("BLE UARTService: ");
pinofal 11:ba885131ca2c 245 /* Setup primary service. */
pinofal 11:ba885131ca2c 246 UARTService uartService(ble);
pinofal 11:ba885131ca2c 247 uartServicePtr = &uartService;
pinofal 11:ba885131ca2c 248 pcUSB.printf("Started\r\n");
pinofal 11:ba885131ca2c 249
pinofal 11:ba885131ca2c 250 /* setup advertising */
pinofal 11:ba885131ca2c 251 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
pinofal 11:ba885131ca2c 252 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
pinofal 11:ba885131ca2c 253 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
pinofal 11:ba885131ca2c 254 ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
pinofal 11:ba885131ca2c 255 ble.gap().setAdvertisingInterval(500); /* 500ms. */
pinofal 11:ba885131ca2c 256 ble.gap().startAdvertising();
pinofal 11:ba885131ca2c 257
pinofal 11:ba885131ca2c 258 // rimane in attesa di eventi su BLE
pinofal 11:ba885131ca2c 259 while (true)
pinofal 11:ba885131ca2c 260 {
pinofal 11:ba885131ca2c 261 ble.waitForEvent();
pinofal 11:ba885131ca2c 262 }
pinofal 11:ba885131ca2c 263 }
pinofal 11:ba885131ca2c 264
pinofal 11:ba885131ca2c 265 /********/
pinofal 11:ba885131ca2c 266 /* MAIN */
pinofal 11:ba885131ca2c 267 /********/
pinofal 11:ba885131ca2c 268 int main(void)
pinofal 11:ba885131ca2c 269 {
pinofal 11:ba885131ca2c 270
pinofal 11:ba885131ca2c 271 // configura velocità della comunicazione seriale su USB-VirtualCom e invia messaggio di benvenuto
pinofal 11:ba885131ca2c 272 pcUSB.baud(9600); //921600 bps
pinofal 11:ba885131ca2c 273 // messaggio di benvenuto
pinofal 11:ba885131ca2c 274 pcUSB.printf("\r\nHallo Amaldi Students - Exercise 6 \r\n");
pinofal 11:ba885131ca2c 275 pcUSB.printf("\r\n*** Bluetooth - PC serial communication ***\r\n");
pinofal 11:ba885131ca2c 276
pinofal 11:ba885131ca2c 277 //imposta il funzionamento del pulsante come "PullDown": Aperto = '0'. L'altra modalità di funzinamento è PullUp
pinofal 11:ba885131ca2c 278 myButton.mode(PullDown);
pinofal 11:ba885131ca2c 279 // inizializza variabili
pinofal 11:ba885131ca2c 280 Led1=0;
pinofal 11:ba885131ca2c 281 //************** INIZIO Ciclo di Test *******************
pinofal 11:ba885131ca2c 282 /*
pinofal 11:ba885131ca2c 283 while(true)
pinofal 11:ba885131ca2c 284 {
pinofal 11:ba885131ca2c 285
pinofal 11:ba885131ca2c 286 // accendi il motore CW alla massima velocità
pinofal 11:ba885131ca2c 287 OutPWB = 1;
pinofal 11:ba885131ca2c 288 OutBI1 = 1;
pinofal 11:ba885131ca2c 289 OutBI2 = 0;
pinofal 11:ba885131ca2c 290
pinofal 11:ba885131ca2c 291 wait(2);
pinofal 11:ba885131ca2c 292
pinofal 11:ba885131ca2c 293 // spegni il motore
pinofal 11:ba885131ca2c 294 OutPWB = 1;
pinofal 11:ba885131ca2c 295 OutBI1 = 0;
pinofal 11:ba885131ca2c 296 OutBI2 = 0;
pinofal 11:ba885131ca2c 297
pinofal 11:ba885131ca2c 298 wait(2);
pinofal 11:ba885131ca2c 299
pinofal 11:ba885131ca2c 300 // accendi il motore CCW alla massima velocità
pinofal 11:ba885131ca2c 301 OutPWB = 1;
pinofal 11:ba885131ca2c 302 OutBI1 = 0;
pinofal 11:ba885131ca2c 303 OutBI2 = 1;
pinofal 11:ba885131ca2c 304
pinofal 11:ba885131ca2c 305 wait(2);
pinofal 11:ba885131ca2c 306
pinofal 11:ba885131ca2c 307 // spegni il motore
pinofal 11:ba885131ca2c 308 OutPWB = 1;
pinofal 11:ba885131ca2c 309 OutBI1 = 0;
pinofal 11:ba885131ca2c 310 OutBI2 = 0;
pinofal 11:ba885131ca2c 311
pinofal 11:ba885131ca2c 312 wait(2);
pinofal 11:ba885131ca2c 313 }
pinofal 11:ba885131ca2c 314 */
pinofal 11:ba885131ca2c 315 //************** FINE Ciclo di Test *******************
pinofal 11:ba885131ca2c 316
pinofal 11:ba885131ca2c 317 // IRQ associata alla ricezione di caratteri da seriale su USB da PC
pinofal 11:ba885131ca2c 318 pcUSB.attach(uartRx,Serial::RxIrq);
pinofal 11:ba885131ca2c 319
pinofal 11:ba885131ca2c 320 /****** START Inizializza BLE **********/
pinofal 11:ba885131ca2c 321 BLE &ble = BLE::Instance();
pinofal 11:ba885131ca2c 322 ble.init(bleInitComplete);
pinofal 11:ba885131ca2c 323 /******* END Inizializza BLE ***********/
pinofal 11:ba885131ca2c 324 }
pinofal 11:ba885131ca2c 325