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
main.cpp@15:040b2ce981f0, 2021-02-04 (annotated)
- 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?
User | Revision | Line number | New 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 |