prova

Dependencies:   mbed X_NUCLEO_IDB0XA1 BLE_API

Committer:
pinofal
Date:
Sun Jul 01 11:32:06 2018 +0000
Revision:
7:79fe72eb3771
Child:
8:766bd3e610fe
Switch On a LED by BLE

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pinofal 7:79fe72eb3771 1 //Tested: NUCLEO-F401RE
pinofal 7:79fe72eb3771 2 #include "mbed.h"
pinofal 7:79fe72eb3771 3
pinofal 7:79fe72eb3771 4 /****************** START BLE Declaration ****************/
pinofal 7:79fe72eb3771 5 #include "ble/BLE.h"
pinofal 7:79fe72eb3771 6 #include "LEDService.h"
pinofal 7:79fe72eb3771 7
pinofal 7:79fe72eb3771 8 DigitalOut Led1(LED1);
pinofal 7:79fe72eb3771 9 DigitalOut myLED(PB_2);
pinofal 7:79fe72eb3771 10 DigitalOut myRelay(PA_15);
pinofal 7:79fe72eb3771 11 DigitalIn myButton(USER_BUTTON);
pinofal 7:79fe72eb3771 12 Serial pc(USBTX, USBRX);
pinofal 7:79fe72eb3771 13
pinofal 7:79fe72eb3771 14
pinofal 7:79fe72eb3771 15 const static char DEVICE_NAME[] = "Amaldi_Ex_5";
pinofal 7:79fe72eb3771 16 static const uint16_t uuid16_list[] = {LEDService::LED_SERVICE_UUID};
pinofal 7:79fe72eb3771 17
pinofal 7:79fe72eb3771 18 LEDService *ledServicePtr;
pinofal 7:79fe72eb3771 19 /***************** END BLE Declaration ********************/
pinofal 7:79fe72eb3771 20
pinofal 7:79fe72eb3771 21 /**************** START BLE Functions **********************/
pinofal 7:79fe72eb3771 22
pinofal 7:79fe72eb3771 23 //****************************************************************
pinofal 7:79fe72eb3771 24 //* Disconnection Callback
pinofal 7:79fe72eb3771 25 //****************************************************************
pinofal 7:79fe72eb3771 26 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
pinofal 7:79fe72eb3771 27 {
pinofal 7:79fe72eb3771 28 (void)params;
pinofal 7:79fe72eb3771 29 BLE::Instance().gap().startAdvertising(); // restart advertising
pinofal 7:79fe72eb3771 30
pinofal 7:79fe72eb3771 31 pc.printf("------ Sono qui 3 disconnetrionCallBack \r\n", error);
pinofal 7:79fe72eb3771 32 }
pinofal 7:79fe72eb3771 33
pinofal 7:79fe72eb3771 34 //****************************************************************************************
pinofal 7:79fe72eb3771 35 //* This callback allows the LEDService to receive updates to the ledState Characteristic.
pinofal 7:79fe72eb3771 36 //*
pinofal 7:79fe72eb3771 37 //* @param[in] params
pinofal 7:79fe72eb3771 38 //* Information about the characterisitc being updated.
pinofal 7:79fe72eb3771 39 //****************************************************************************************
pinofal 7:79fe72eb3771 40 void onDataWrittenCallback(const GattWriteCallbackParams *params)
pinofal 7:79fe72eb3771 41 {
pinofal 7:79fe72eb3771 42 if ((params->handle == ledServicePtr->getValueHandle()) && (params->len == 1))
pinofal 7:79fe72eb3771 43 {
pinofal 7:79fe72eb3771 44 switch(*(params->data))
pinofal 7:79fe72eb3771 45 {
pinofal 7:79fe72eb3771 46 case 0:
pinofal 7:79fe72eb3771 47 {
pinofal 7:79fe72eb3771 48 Led1 = 0x00; // spegni LED
pinofal 7:79fe72eb3771 49 myLED = 0x00; // spegni LED
pinofal 7:79fe72eb3771 50 } break;
pinofal 7:79fe72eb3771 51 case 1:
pinofal 7:79fe72eb3771 52 {
pinofal 7:79fe72eb3771 53 Led1 = 0x01; // accendi LED
pinofal 7:79fe72eb3771 54 myLED = 0x00; // spegni LED
pinofal 7:79fe72eb3771 55 myRelay=0x00;
pinofal 7:79fe72eb3771 56 } break;
pinofal 7:79fe72eb3771 57 case 2:
pinofal 7:79fe72eb3771 58 {
pinofal 7:79fe72eb3771 59 Led1 = 0x00; // spegni LED
pinofal 7:79fe72eb3771 60 myLED = 0x01; // accendi LED
pinofal 7:79fe72eb3771 61 } break;
pinofal 7:79fe72eb3771 62 case 3:
pinofal 7:79fe72eb3771 63 {
pinofal 7:79fe72eb3771 64 Led1 = 0x01; // accendi LED
pinofal 7:79fe72eb3771 65 myLED = 0x01; // accendi LED
pinofal 7:79fe72eb3771 66 myRelay=0x01;
pinofal 7:79fe72eb3771 67 } break;
pinofal 7:79fe72eb3771 68 case 4:
pinofal 7:79fe72eb3771 69 {
pinofal 7:79fe72eb3771 70 myRelay = 0x01; // accendi Relay
pinofal 7:79fe72eb3771 71 } break;
pinofal 7:79fe72eb3771 72 case 5:
pinofal 7:79fe72eb3771 73 {
pinofal 7:79fe72eb3771 74 myRelay = 0x00; // spegni Relay
pinofal 7:79fe72eb3771 75 } break;
pinofal 7:79fe72eb3771 76
pinofal 7:79fe72eb3771 77 default: break;
pinofal 7:79fe72eb3771 78 }
pinofal 7:79fe72eb3771 79 pc.printf("\n\r---- Ricevuto: %d \n\r",*(params->data));
pinofal 7:79fe72eb3771 80
pinofal 7:79fe72eb3771 81 //Led1 = *(params->data); // in params->data riceve il byte inviato dal cellulare
pinofal 7:79fe72eb3771 82 }
pinofal 7:79fe72eb3771 83 }
pinofal 7:79fe72eb3771 84
pinofal 7:79fe72eb3771 85 //**************************************************************************
pinofal 7:79fe72eb3771 86 //* This function is called when the ble initialization process has failled
pinofal 7:79fe72eb3771 87 //**************************************************************************
pinofal 7:79fe72eb3771 88 void onBleInitError(BLE &ble, ble_error_t error)
pinofal 7:79fe72eb3771 89 {
pinofal 7:79fe72eb3771 90 /* Initialization error handling should go here */
pinofal 7:79fe72eb3771 91 }
pinofal 7:79fe72eb3771 92
pinofal 7:79fe72eb3771 93 //**************************************************************************
pinofal 7:79fe72eb3771 94 //* Callback triggered when the ble initialization process has finished
pinofal 7:79fe72eb3771 95 //**************************************************************************
pinofal 7:79fe72eb3771 96 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
pinofal 7:79fe72eb3771 97 {
pinofal 7:79fe72eb3771 98 BLE& ble = params->ble;
pinofal 7:79fe72eb3771 99 ble_error_t error = params->error;
pinofal 7:79fe72eb3771 100
pinofal 7:79fe72eb3771 101 if (error != BLE_ERROR_NONE)
pinofal 7:79fe72eb3771 102 {
pinofal 7:79fe72eb3771 103 /* In case of error, forward the error handling to onBleInitError */
pinofal 7:79fe72eb3771 104 onBleInitError(ble, error);
pinofal 7:79fe72eb3771 105 return;
pinofal 7:79fe72eb3771 106 }
pinofal 7:79fe72eb3771 107
pinofal 7:79fe72eb3771 108 /* Ensure that it is the default instance of BLE */
pinofal 7:79fe72eb3771 109 if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE)
pinofal 7:79fe72eb3771 110 {
pinofal 7:79fe72eb3771 111 return;
pinofal 7:79fe72eb3771 112 }
pinofal 7:79fe72eb3771 113
pinofal 7:79fe72eb3771 114 ble.gap().onDisconnection(disconnectionCallback);
pinofal 7:79fe72eb3771 115 ble.gattServer().onDataWritten(onDataWrittenCallback);
pinofal 7:79fe72eb3771 116
pinofal 7:79fe72eb3771 117 bool initialValueForLEDCharacteristic = true;
pinofal 7:79fe72eb3771 118 ledServicePtr = new LEDService(ble, initialValueForLEDCharacteristic);
pinofal 7:79fe72eb3771 119
pinofal 7:79fe72eb3771 120 /* setup advertising */
pinofal 7:79fe72eb3771 121 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
pinofal 7:79fe72eb3771 122 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list));
pinofal 7:79fe72eb3771 123 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
pinofal 7:79fe72eb3771 124 ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
pinofal 7:79fe72eb3771 125 ble.gap().setAdvertisingInterval(1000); // 1000ms.
pinofal 7:79fe72eb3771 126 ble.gap().startAdvertising();
pinofal 7:79fe72eb3771 127
pinofal 7:79fe72eb3771 128 while (true)
pinofal 7:79fe72eb3771 129 {
pinofal 7:79fe72eb3771 130 ble.waitForEvent();
pinofal 7:79fe72eb3771 131 //pc.printf("-------- Sono qui 1 WaitForEvent() \n\r");
pinofal 7:79fe72eb3771 132 }
pinofal 7:79fe72eb3771 133 }
pinofal 7:79fe72eb3771 134 /******************* END BLE Functions *************************/
pinofal 7:79fe72eb3771 135
pinofal 7:79fe72eb3771 136
pinofal 7:79fe72eb3771 137 /********/
pinofal 7:79fe72eb3771 138 /* MAIN */
pinofal 7:79fe72eb3771 139 /********/
pinofal 7:79fe72eb3771 140 int main(void)
pinofal 7:79fe72eb3771 141 {
pinofal 7:79fe72eb3771 142 // configura velocità della comunicazione seriale su USB-VirtualCom e invia messaggio di benvenuto
pinofal 7:79fe72eb3771 143 pc.baud(921600); //921600 bps
pinofal 7:79fe72eb3771 144 // messaggio di benvenuto
pinofal 7:79fe72eb3771 145 pc.printf("\r\nHallo Amaldi Students - Exercise 5 \r\n");
pinofal 7:79fe72eb3771 146 pc.printf("\r\n*** Bluetooth Driving for LED and Relay ***\r\n");
pinofal 7:79fe72eb3771 147
pinofal 7:79fe72eb3771 148 //imposta il funzionamento del pulsante come "PullDown": Aperto = '0'. L'altra modalità di funzinamento è PullUp
pinofal 7:79fe72eb3771 149 myButton.mode(PullDown);
pinofal 7:79fe72eb3771 150
pinofal 7:79fe72eb3771 151 /* ciclo di prova
pinofal 7:79fe72eb3771 152 while(true)
pinofal 7:79fe72eb3771 153 {
pinofal 7:79fe72eb3771 154 if(myButton==0x01)
pinofal 7:79fe72eb3771 155 {
pinofal 7:79fe72eb3771 156 myLED=0x01;
pinofal 7:79fe72eb3771 157 //while(myButton !=0x00);
pinofal 7:79fe72eb3771 158 Led1=0x01;
pinofal 7:79fe72eb3771 159 myRelay=0x01; // accendi relay
pinofal 7:79fe72eb3771 160 }
pinofal 7:79fe72eb3771 161 else
pinofal 7:79fe72eb3771 162 {
pinofal 7:79fe72eb3771 163 myLED=0x00;
pinofal 7:79fe72eb3771 164 Led1=0x00;
pinofal 7:79fe72eb3771 165 myRelay=0x00; // spegni relay
pinofal 7:79fe72eb3771 166 }
pinofal 7:79fe72eb3771 167 }
pinofal 7:79fe72eb3771 168 */
pinofal 7:79fe72eb3771 169 /*************** START BLE Main ************/
pinofal 7:79fe72eb3771 170 BLE &ble = BLE::Instance();
pinofal 7:79fe72eb3771 171 ble.init(bleInitComplete);
pinofal 7:79fe72eb3771 172 /*************** END BLE Main ***********/
pinofal 7:79fe72eb3771 173
pinofal 7:79fe72eb3771 174
pinofal 7:79fe72eb3771 175
pinofal 7:79fe72eb3771 176 }
pinofal 7:79fe72eb3771 177