Sensor ultrasónico con GAP

Dependencies:   BLE_API HC_SR04_Ultrasonic_Library mbed

Fork of LPC1768_HCSR04_HelloWorld by jim hamblen

Revision:
3:4cead4855aa7
Parent:
2:3566c2d1e86b
--- a/main.cpp	Tue Sep 13 18:16:42 2016 +0000
+++ b/main.cpp	Wed Feb 22 23:27:38 2017 +0000
@@ -1,21 +1,79 @@
 #include "mbed.h"
 #include "ultrasonic.h"
+#include "ble/BLE.h"
+Serial pc(USBTX, USBRX);
 
- void dist(int distance)
+const static char     DEVICE_NAME[] = "EVA BRA TEMP";
+ 
+ void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
+{
+    BLE::Instance().gap().startAdvertising();
+}
+
+void onBleInitError(BLE &ble, ble_error_t error)
+{
+    /* Avoid compiler warnings */
+    (void) ble;
+    (void) error;
+    
+    /* Initialization error handling should go here */
+}    
+
+void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
+{
+    BLE&        ble   = params->ble;
+    ble_error_t error = params->error;
+
+    if (error != BLE_ERROR_NONE) {
+        /* In case of error, forward the error handling to onBleInitError */
+        onBleInitError(ble, error);
+        return;
+    }
+
+    /* Ensure that it is the default instance of BLE */
+    if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) {
+        return;
+    }
+ /* Set device name characteristic data */
+    ble.gap().setDeviceName((const uint8_t *) DEVICE_NAME);
+
+    /* Optional: add callback for disconnection */
+    ble.gap().onDisconnection(disconnectionCallback);
+    
+    ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::SERVICE_DATA, distance);
+
+    /* Sacrifice 3B of 31B to Advertising Flags */
+    ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE );
+    ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
+ 
+    
+    /* Set advertising interval. Longer interval == longer battery life */
+    ble.gap().setAdvertisingInterval(100); /* 100ms */
+
+    /* Start advertising */
+    ble.gap().startAdvertising();
+ 
+ }
+
+ void dist(uint8_t distance)
 {
     //put code here to execute when the distance has changed
-    printf("Distance %d mm\r\n", distance);
+    pc.printf("Distance %d mm\r\n", distance);
 }
 
-ultrasonic mu(p6, p7, .1, 1, &dist);    //Set the trigger pin to D8 and the echo pin to D9
+ultrasonic mu(D6, D7, .1, 1, &dist);    //Set the trigger pin to D8 and the echo pin to D9
                                         //have updates every .1 seconds and a timeout after 1
                                         //second, and call dist when the distance changes
 
 int main()
 {
+    BLE& ble = BLE::Instance(BLE::DEFAULT_INSTANCE);
+    ble.init(bleInitComplete);
+    
     mu.startUpdates();//start measuring the distance
     while(1)
     {
+        ble.waitForEvent();
         //Do something else here
         mu.checkDistance();     //call checkDistance() as much as possible, as this is where
                                 //the class checks if dist needs to be called.