Robotique FIP / Mbed 2 deprecated BlueNRG

Dependencies:   mbed HC_SR04_Ultrasonic_Library

Committer:
julientiron
Date:
Tue May 19 17:46:51 2015 +0000
Revision:
2:b5166e24c7a6
Parent:
0:3d641e170a74
Child:
3:829f081fde15
?a marche BLE+capteur de distance;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
julientiron 0:3d641e170a74 1 #include "mbed.h"
julientiron 2:b5166e24c7a6 2 #include "ultrasonic.h"
julientiron 0:3d641e170a74 3
julientiron 0:3d641e170a74 4 DigitalOut myled(LED1);
julientiron 0:3d641e170a74 5
julientiron 0:3d641e170a74 6 #include "debug.h"
julientiron 0:3d641e170a74 7 #include "btle.h"
julientiron 0:3d641e170a74 8 //#include "BlueNRGDevice.h"//User does not use any platform specific header file
julientiron 0:3d641e170a74 9 #include "BLEDevice.h"
julientiron 0:3d641e170a74 10 #include "UUID.h"
julientiron 0:3d641e170a74 11 #include "Utils.h"
julientiron 0:3d641e170a74 12
julientiron 0:3d641e170a74 13 BLEDevice dev;
julientiron 0:3d641e170a74 14
julientiron 2:b5166e24c7a6 15 const static char DEVICE_NAME[] = "FearInProgress";
julientiron 2:b5166e24c7a6 16 const uint8_t device_address[6] = { 0x07, 0x07, 0x07, 0x07, 0x07, 0x07 }; //Peripheral address
julientiron 2:b5166e24c7a6 17 //InterruptIn event_button(USER_BUTTON);
julientiron 0:3d641e170a74 18 volatile bool go_to_sleep = true;
julientiron 0:3d641e170a74 19
julientiron 2:b5166e24c7a6 20 #define MAX_SERVICES_NOS 1
julientiron 2:b5166e24c7a6 21
julientiron 2:b5166e24c7a6 22 static uint8_t proximity = 0;
julientiron 2:b5166e24c7a6 23 static uint8_t mm[2] = {0x00, proximity};
julientiron 2:b5166e24c7a6 24 static uint8_t rate = 1;
julientiron 2:b5166e24c7a6 25 static uint8_t upd[2] = {0x00, rate};
julientiron 0:3d641e170a74 26
julientiron 2:b5166e24c7a6 27 GattCharacteristic proxLevel(GattCharacteristic::UUID_ALERT_LEVEL_CHAR, mm, sizeof(mm), sizeof(mm),
julientiron 0:3d641e170a74 28 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY|GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ
julientiron 0:3d641e170a74 29 /*GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE*/);
julientiron 0:3d641e170a74 30
julientiron 2:b5166e24c7a6 31 GattCharacteristic updateRate(GattCharacteristic::UUID_MEASUREMENT_INTERVAL_CHAR , upd, sizeof(upd), sizeof(upd),
julientiron 0:3d641e170a74 32 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE|
julientiron 0:3d641e170a74 33 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE|GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
julientiron 0:3d641e170a74 34
julientiron 2:b5166e24c7a6 35 GattCharacteristic *proxChars[] = {&proxLevel, &updateRate };
julientiron 2:b5166e24c7a6 36 //UUID PROXSERVICE(GattService::UUID_IMMEDIATE_ALERT_SERVICE);
julientiron 2:b5166e24c7a6 37 GattService proxService(GattService::UUID_IMMEDIATE_ALERT_SERVICE, proxChars, sizeof(proxChars) / sizeof(GattCharacteristic *));
julientiron 0:3d641e170a74 38
julientiron 2:b5166e24c7a6 39 static const uint16_t uuid16_list[] = {GattService::UUID_IMMEDIATE_ALERT_SERVICE};
julientiron 2:b5166e24c7a6 40
julientiron 2:b5166e24c7a6 41 void dist(int distance)
julientiron 2:b5166e24c7a6 42 {
julientiron 2:b5166e24c7a6 43
julientiron 2:b5166e24c7a6 44 if (dev.getGapState().connected) {
julientiron 2:b5166e24c7a6 45 mm[1] = distance;
julientiron 2:b5166e24c7a6 46 dev.updateCharacteristicValue(proxLevel.getHandle(), mm, sizeof(mm));
julientiron 2:b5166e24c7a6 47 }
julientiron 2:b5166e24c7a6 48 printf("Distance changed to %dmm\r\n", distance);
julientiron 2:b5166e24c7a6 49 }
julientiron 0:3d641e170a74 50
julientiron 0:3d641e170a74 51 void ISR_pressed() // ISR for the button press
julientiron 0:3d641e170a74 52 {
julientiron 2:b5166e24c7a6 53 DEBUG("Button pressed\n"); // Show that the button has pressed
julientiron 0:3d641e170a74 54 go_to_sleep = !go_to_sleep; // Toogle the sleep state
julientiron 2:b5166e24c7a6 55 //mu.checkDistance();
julientiron 2:b5166e24c7a6 56 //event_button.disable_irq(); // Disable the interrupt request
julientiron 0:3d641e170a74 57 }
julientiron 0:3d641e170a74 58
julientiron 0:3d641e170a74 59 void disconnectionCallback(uint16_t Handle_t)
julientiron 0:3d641e170a74 60 {
julientiron 0:3d641e170a74 61 DEBUG("Disconnected!\n\r");
julientiron 0:3d641e170a74 62 DEBUG("Restarting the advertising process\n\r");
julientiron 0:3d641e170a74 63 dev.startAdvertising();
julientiron 0:3d641e170a74 64 }
julientiron 0:3d641e170a74 65
julientiron 0:3d641e170a74 66 void onWriteCallback(uint16_t attributeHandle) {
julientiron 0:3d641e170a74 67 DEBUG("Write Callback!!\n\r");
julientiron 0:3d641e170a74 68 }
julientiron 0:3d641e170a74 69
julientiron 0:3d641e170a74 70 void onConnectionCallback(uint16_t Handle_t) {
julientiron 0:3d641e170a74 71 //myled = 1; // LED is ON
julientiron 0:3d641e170a74 72 DEBUG("Connected BlueNRG!!\n\r");
julientiron 0:3d641e170a74 73 }
julientiron 0:3d641e170a74 74
julientiron 0:3d641e170a74 75
julientiron 0:3d641e170a74 76 void onNotifyEnabled(uint16_t charHandle) {
julientiron 0:3d641e170a74 77 //myled = 1; // LED is ON
julientiron 0:3d641e170a74 78 DEBUG("onNotifyEnabled!!\n\r");
julientiron 0:3d641e170a74 79 }
julientiron 0:3d641e170a74 80
julientiron 0:3d641e170a74 81 void onNotifyDisabled(uint16_t charHandle) {
julientiron 0:3d641e170a74 82 //myled = 1; // LED is ON
julientiron 0:3d641e170a74 83 DEBUG("onNotifyDisabled!!\n\r");
julientiron 0:3d641e170a74 84 }
julientiron 0:3d641e170a74 85
julientiron 0:3d641e170a74 86 void onDataSentNotify() {
julientiron 0:3d641e170a74 87 //myled = 1; // LED is ON
julientiron 0:3d641e170a74 88 DEBUG("on Data Sent Notify!!\n\r");
julientiron 0:3d641e170a74 89 }
julientiron 0:3d641e170a74 90
julientiron 0:3d641e170a74 91
julientiron 0:3d641e170a74 92 /**
julientiron 0:3d641e170a74 93 * Triggered periodically by the 'ticker' interrupt; updates hrmCounter.
julientiron 0:3d641e170a74 94 */
julientiron 0:3d641e170a74 95 void periodicCallback(void)
julientiron 0:3d641e170a74 96 {
julientiron 0:3d641e170a74 97 //myled = !myled; /* Do blinky on LED1 while we're waiting for BLE events */
julientiron 0:3d641e170a74 98 }
julientiron 0:3d641e170a74 99
julientiron 0:3d641e170a74 100 int main() {
julientiron 0:3d641e170a74 101
julientiron 2:b5166e24c7a6 102 //Ticker ticker; //For Tick interrupt if used later on (periodic data updates?)
julientiron 2:b5166e24c7a6 103 //event_button.mode(PullUp); // Setup the internall pull-up resistor
julientiron 2:b5166e24c7a6 104 //event_button.fall(&ISR_pressed); // Set the ISR associated to event fall (push the button)
julientiron 2:b5166e24c7a6 105 //ticker.attach(periodicCallback, 1);
julientiron 2:b5166e24c7a6 106
julientiron 0:3d641e170a74 107 myled = 0;//Switch OFF LED1
julientiron 0:3d641e170a74 108
julientiron 0:3d641e170a74 109 DEBUG("Initializing BlueNRG...\n\r");
julientiron 0:3d641e170a74 110 dev.init();
julientiron 0:3d641e170a74 111
julientiron 0:3d641e170a74 112 dev.onConnection(onConnectionCallback);
julientiron 0:3d641e170a74 113 dev.onDisconnection(disconnectionCallback);
julientiron 0:3d641e170a74 114 dev.onDataWritten(onWriteCallback);
julientiron 0:3d641e170a74 115 dev.onUpdatesEnabled(onNotifyEnabled);
julientiron 0:3d641e170a74 116 dev.onDataSent(onDataSentNotify);
julientiron 0:3d641e170a74 117 dev.onUpdatesDisabled(onNotifyDisabled);
julientiron 0:3d641e170a74 118
julientiron 0:3d641e170a74 119 dev.setAddress(Gap::ADDR_TYPE_PUBLIC, device_address);//Will reset the device and re-init()
julientiron 2:b5166e24c7a6 120
julientiron 0:3d641e170a74 121 /* setup advertising */
julientiron 0:3d641e170a74 122 dev.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
julientiron 0:3d641e170a74 123 dev.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t*)uuid16_list, sizeof(uuid16_list));
julientiron 0:3d641e170a74 124 dev.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
julientiron 0:3d641e170a74 125 dev.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
julientiron 0:3d641e170a74 126 dev.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */
julientiron 0:3d641e170a74 127 DEBUG("Starting Advertising...\n\r");
julientiron 0:3d641e170a74 128 dev.startAdvertising();
julientiron 2:b5166e24c7a6 129 dev.addService(proxService);
julientiron 2:b5166e24c7a6 130 ultrasonic mu(D8, D9, .5, 1, &dist);
julientiron 2:b5166e24c7a6 131 mu.startUpdates();
julientiron 0:3d641e170a74 132
julientiron 0:3d641e170a74 133 while(1) {
julientiron 2:b5166e24c7a6 134 /*
julientiron 0:3d641e170a74 135 if(go_to_sleep)
julientiron 0:3d641e170a74 136 {
julientiron 0:3d641e170a74 137 myled = 0;
julientiron 0:3d641e170a74 138 event_button.enable_irq(); // Enable the interrupt request
julientiron 0:3d641e170a74 139 //sleep(); // Enter Low Power Mode
julientiron 0:3d641e170a74 140 deepsleep(); // Enter Low Power Mode (deep)
julientiron 0:3d641e170a74 141 wait_ms(200); // Wait 200ms for debounce
julientiron 0:3d641e170a74 142 event_button.enable_irq(); // Enable the interrupt request
julientiron 2:b5166e24c7a6 143 }*/
julientiron 2:b5166e24c7a6 144 //else
julientiron 2:b5166e24c7a6 145 mu.checkDistance();
julientiron 0:3d641e170a74 146 myled = 1;
julientiron 2:b5166e24c7a6 147 wait(1);
julientiron 0:3d641e170a74 148 //DEBUG("tic!\n\r");
julientiron 0:3d641e170a74 149 periodicCallback();//Works from here!!
julientiron 0:3d641e170a74 150 dev.waitForEvent();
julientiron 0:3d641e170a74 151 }
julientiron 0:3d641e170a74 152 }