workss

Dependencies:   mbed BLE_API nRF51822 VL53L0X

Revision:
31:d1ceadbc6c44
Parent:
30:5e1c85083f24
Child:
32:b9306ebceb61
--- a/main.cpp	Wed Mar 13 17:25:02 2019 +0000
+++ b/main.cpp	Wed Mar 13 19:52:07 2019 +0000
@@ -2,21 +2,16 @@
 #include "ble/BLE.h"
 #include "VL53L0X.h"
 #include "ble/services/HeartRateService.h"
-
+ 
 #define range1_addr         (0x56)
 #define range2_addr         (0x60)
 #define range1_XSHUT        p15
 #define range2_XSHUT        p16
 #define VL53L0_I2C_SDA      p30 
 #define VL53L0_I2C_SCL      p7  
-#define TIME_SCALE          2 // sensors activated every 100ms * TIME_SCALE
+#define TIME_SCALE          3 // sensors activated every 100ms * TIME_SCALE
 #define DIST_MIN            0
 #define DIST_MAX            22
-
-const static int cw = 20 / TIME_SCALE;
-int countdown = cw;
-bool countdown1_triggered = false, countdown2_triggered = false;
-bool step_in = false, step_out = false;
  
 Serial pc(USBTX, USBRX);
 static DevI2C devI2c(VL53L0_I2C_SDA, VL53L0_I2C_SCL); 
@@ -26,31 +21,35 @@
 uint16_t customServiceUUID  = 0xA000;
 uint16_t readCharUUID       = 0xA001;
 uint16_t writeCharUUID      = 0xA002;
-
+ 
 static DigitalOut shutdown1_pin(range1_XSHUT);
 static VL53L0X range1(&devI2c, &shutdown1_pin, NC);
 static DigitalOut shutdown2_pin(range2_XSHUT);
 static VL53L0X range2(&devI2c, &shutdown2_pin, NC);
-
-uint32_t distance1, distance2;
-int dist1, dist2, status1, status2;
+ 
+uint32_t distance1;
+uint32_t distance2;
+int dist1;
+int dist2;
+int status1;
+int status2;
 
-const static char     DEVICE_NAME[]        = "OCCUPY-CRICHTON-ST";
-static const uint16_t uuid16_list[]        = {GattService::UUID_HEART_RATE_SERVICE};
-
+const static int cw = 20 / TIME_SCALE;
+int countdown = cw;
+bool countdown1_triggered = false, countdown2_triggered = false;
+bool step_in = false, step_out = false;
+ 
+const static char     DEVICE_NAME[]        = "OCCUPY-CRICHTON-ST"; // change this
+static const uint16_t uuid16_list[]        = {GattService::UUID_HEART_RATE_SERVICE}; //Custom UUID, FFFF is reserved for development
+ 
 HeartRateService         *hrService;
 uint8_t hrmCounter = 0; 
-
-void connectionCallback(const Gap::ConnectionCallbackParams_t *) {
-    printf("Bluetooth connected\n");
-}
-
+ 
 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *)
 {
-    printf("Bluetooth disconnected\n");
     BLE::Instance(BLE::DEFAULT_INSTANCE).gap().startAdvertising();
 }
-
+ 
 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
 {
     BLE &ble          = params->ble;
@@ -59,21 +58,22 @@
     if (error != BLE_ERROR_NONE) {
         return;
     }
-    
-    ble.gap().onConnection(connectionCallback);
+ 
     ble.gap().onDisconnection(disconnectionCallback);
     hrService = new HeartRateService(ble, hrmCounter, HeartRateService::LOCATION_FINGER);
-
-    ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
-    ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); 
-    ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
-    ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list));
+ 
+    ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); // BLE only, no classic BT
+    ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); // advertising type
+    ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); // add name
+    ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list)); // UUID's broadcast in advertising packet
+    ble.gap().setAdvertisingInterval(100); // 100ms.
     ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::GENERIC_HEART_RATE_SENSOR);
-
+ 
     ble.gap().startAdvertising();
 }
-
+ 
 int format_dist(int distance) {
+   // local variable declaration
    int result;
  
    if (distance > 1270)
@@ -83,7 +83,7 @@
  
    return result; 
 }
-
+ 
 void wakeup_event_cb() {
     led != led;
     
@@ -99,16 +99,15 @@
             countdown2_triggered = false;
         }
     }
-    
+        
     status1 = range1.get_distance(&distance1);
     status2 = range2.get_distance(&distance2);
     
     dist1 = format_dist(distance1);
     dist2 = format_dist(distance2);
-
+    
     if (status1 == VL53L0X_ERROR_NONE) {
-//        printf("Range1 [mm]:            %6ld\r\n", dist1);
-
+        printf("Range1 [mm]:            %6ld\r\n", dist1);
         if (dist1 > DIST_MIN && dist1 < DIST_MAX) {
             led1 = 0;
             
@@ -117,22 +116,23 @@
                 countdown = cw;
             } else if (countdown2_triggered) {
                 printf("STEP IN DETECTED\n");
-                hrmCounter = 1;
-                hrService->updateHeartRate(hrmCounter);
+//                hrmCounter = 1;
+//                hrService->updateHeartRate(hrmCounter);
                 countdown2_triggered = false;
             }
-            //
-//            hrmCounter = dist1;
-//            hrService->updateHeartRate(hrmCounter);
+            
+            hrmCounter = dist1;
+            hrService->updateHeartRate(hrmCounter);
         }
         else {
             led1 = 1;
         }
     } else {
-//        printf("Range1 [mm]:                --\r\n");
+        printf("Range1 [mm]:                --\r\n");
         led1 = 1;
     }
     if (status2 == VL53L0X_ERROR_NONE) {
+        printf("Range2 [mm]:            %6ld\r\n", dist2);
         if (dist2 > DIST_MIN && dist2 < DIST_MAX) {
             led2 = 0;
             
@@ -141,20 +141,20 @@
                 countdown = cw;
             } else if (countdown1_triggered) {
                 printf("STEP OUT DETECTED\n");
-                hrmCounter = 16;
-                hrService->updateHeartRate(hrmCounter);
+//                hrmCounter = 16;
+//                hrService->updateHeartRate(hrmCounter);
                 countdown1_triggered = false;
             }
             
-            //hrmCounter = dist2;
-//            hrService->updateHeartRate(hrmCounter);
+            hrmCounter = dist2;
+            hrService->updateHeartRate(hrmCounter);
         }
     } else {
-//        printf("Range2 [mm]:                --\r\n");
+        printf("Range2 [mm]:                --\r\n");
         led2 = 1;
     }
 }
-
+ 
 int main(void)
 {
     range1.init_sensor(range1_addr);
@@ -166,7 +166,8 @@
     ble.init(bleInitComplete);
     
     Ticker ticker;
-    ticker.attach(wakeup_event_cb, 0.1*TIME_SCALE);
+    
+    ticker.attach(wakeup_event_cb, 0.1 * TIME_SCALE);
     
     while (ble.hasInitialized()) {
         ble.waitForEvent();