I've got some basic filter code setup (but not yet tested).

Dependencies:   BLE_API Queue mbed nRF51822

Fork of BLE_HeartRate by Bluetooth Low Energy

Revision:
61:1de72bdab0ef
Parent:
56:83623419d5e4
Child:
62:8e2fbe131b53
--- a/main.cpp	Mon May 11 07:04:53 2015 +0000
+++ b/main.cpp	Sun May 17 00:27:16 2015 +0000
@@ -25,12 +25,17 @@
  * interval.*/
 #define UPDATE_PARAMS_FOR_LONGER_CONNECTION_INTERVAL 0
 
+extern void setup_sampler(void (*function)(uint32_t));
+
 BLEDevice  ble;
 DigitalOut led1(LED1);
 
+volatile uint8_t hrmCounter = 100; // init HRM to 100bps
+
 const static char     DEVICE_NAME[]        = "HRM1";
 static const uint16_t uuid16_list[]        = {GattService::UUID_HEART_RATE_SERVICE,
-                                              GattService::UUID_DEVICE_INFORMATION_SERVICE};
+        GattService::UUID_DEVICE_INFORMATION_SERVICE
+                                             };
 static volatile bool  triggerSensorPolling = false;
 
 void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason)
@@ -38,26 +43,37 @@
     ble.startAdvertising(); // restart advertising
 }
 
-void periodicCallback(void)
+//void periodicCallback(void)
+//{
+//    led1 = !led1; /* Do blinky on LED1 while we're waiting for BLE events */
+//
+//    /* Note that the periodicCallback() executes in interrupt context, so it is safer to do
+//     * heavy-weight sensor polling from the main thread. */
+//    triggerSensorPolling = true;
+//}
+
+void sampler_callback(uint32_t value)
 {
-    led1 = !led1; /* Do blinky on LED1 while we're waiting for BLE events */
-
-    /* Note that the periodicCallback() executes in interrupt context, so it is safer to do
-     * heavy-weight sensor polling from the main thread. */
+    hrmCounter = (uint8_t) (value);
+//    led1 = !led1;
     triggerSensorPolling = true;
 }
 
 int main(void)
 {
     led1 = 1;
-    Ticker ticker;
-    ticker.attach(periodicCallback, 1); // blink LED every second
+    // Ticker ticker;
+    //ticker.attach(periodicCallback, 0.1); // blink LED every second
+
+    printf("Executing code...\n");
+            
+    setup_sampler(&sampler_callback);
 
     ble.init();
     ble.onDisconnection(disconnectionCallback);
 
     /* Setup primary service. */
-    uint8_t hrmCounter = 100; // init HRM to 100bps
+    //uint8_t hrmCounter = 100; // init HRM to 100bps
     HeartRateService hrService(ble, hrmCounter, HeartRateService::LOCATION_FINGER);
 
     /* Setup auxiliary service. */
@@ -78,15 +94,18 @@
         if (triggerSensorPolling && ble.getGapState().connected) {
             triggerSensorPolling = false;
 
-            // Do blocking calls or whatever is necessary for sensor polling.
-            // In our case, we simply update the HRM measurement. 
-            hrmCounter++;
-            
-            //  100 <= HRM bps <=175
-            if (hrmCounter == 175) {
-                hrmCounter = 100;
-            }
-            
+    led1 = !led1;
+
+            printf("v=%d\n", hrmCounter);
+//            // Do blocking calls or whatever is necessary for sensor polling.
+//            // In our case, we simply update the HRM measurement.
+//            hrmCounter++;
+//
+//            //  100 <= HRM bps <=175
+//            if (hrmCounter == 175) {
+//                hrmCounter = 100;
+//            }
+
             // update bps
             hrService.updateHeartRate(hrmCounter);
         } else {