Heart Rate Monitor example for the BLE API using nRF51822 native mode drivers

Dependencies:   BLE_API mbed nRF51822

Fork of BLE_HeartRate by Bluetooth Low Energy

Files at this revision

API Documentation at this revision

Comitter:
ankuraga
Date:
Wed Sep 02 06:14:39 2015 +0000
Parent:
72:fa6520343b72
Commit message:
Simulating heart rate and temperature.

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Mon Aug 31 05:47:55 2015 +0000
+++ b/main.cpp	Wed Sep 02 06:14:39 2015 +0000
@@ -17,6 +17,7 @@
 #include "mbed.h"
 #include "ble/BLE.h"
 #include "ble/services/HeartRateService.h"
+#include "ble/services/HealthThermometerService.h"
 #include "ble/services/BatteryService.h"
 #include "ble/services/DeviceInformationService.h"
 #include "PulseSensor.h"
@@ -26,6 +27,7 @@
 
 const static char     DEVICE_NAME[]        = "HRM1";
 static const uint16_t uuid16_list[]        = {GattService::UUID_HEART_RATE_SERVICE,
+                                              GattService::UUID_HEALTH_THERMOMETER_SERVICE,
                                               GattService::UUID_DEVICE_INFORMATION_SERVICE};
 static volatile bool  triggerSensorPolling = false;
 
@@ -35,7 +37,8 @@
 }
 
 HeartRateService * hrService;
-void sendDataToProcessing(int hrmCounter);
+HealthThermometerService * htService;
+void sendDataToProcessing(int, int);
 
 int main(void)
 {
@@ -46,7 +49,9 @@
 
     /* Setup primary service. */
     uint8_t hrmCounter = 100; // init HRM to 100bps
+    int htCounter = 100;
     hrService = new HeartRateService(ble, hrmCounter, HeartRateService::LOCATION_FINGER);
+    htService = new HealthThermometerService(ble, hrmCounter, HealthThermometerService::LOCATION_BODY);
 
     /* Setup auxiliary service. */
     DeviceInformationService deviceInfo(ble, "ARM", "Model1", "SN1", "hw-rev1", "fw-rev1", "soft-rev1");
@@ -55,46 +60,64 @@
     ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
     ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list));
     ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::GENERIC_HEART_RATE_SENSOR);
+    ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::GENERIC_THERMOMETER);
+    
     ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
     ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
     ble.gap().setAdvertisingInterval(1000); /* 1000ms */
     ble.gap().startAdvertising();
     
-    PulseSensor sensor(P0_5, sendDataToProcessing);
-    sensor.start();
+    //PulseSensor sensor(P0_5, sendDataToProcessing);
+    //sensor.start();
     
-    while (1){
-        ble.waitForEvent();
-    }
+    /*while (1){
+        led1 = 0;
+        wait(1);
+        led1 = 1;
+        wait(1);
+    }*/
         
 
     // infinite loop
-    /*
+    
     while (1) {
         // check for trigger from periodicCallback()
-        if (triggerSensorPolling && ble.getGapState().connected) {
+        if (1)
+        //(triggerSensorPolling && ble.getGapState().connected)
+         {
             triggerSensorPolling = false;
-
+            
+            led1 = 1;
+            wait(1);
             // Do blocking calls or whatever is necessary for sensor polling.
             // In our case, we simply update the HRM measurement.
             hrmCounter++;
+            htCounter--;
 
             //  100 <= HRM bps <=175
             if (hrmCounter == 175) {
                 hrmCounter = 100;
             }
+            if (htCounter == 1) {
+                htCounter = 100;
+            }
+            
 
             // update bps
-            sendDataToProcessing(hrmCounter);
+            sendDataToProcessing(hrmCounter, htCounter);
+            led1 = 0;
+            wait(1);
         } else {
-            ble.waitForEvent(); // low power wait for event
+            //ble.waitForEvent(); // low power wait for event
+            led1 = 1;
         }
-    }*/
+    }
 }
 
 //PulseSensor.h expects a function with argument (int)..you can't use uint8 here
- void sendDataToProcessing(int hrmCounter){
+ void sendDataToProcessing(int hrmCounter, int htCounter){
     hrService->updateHeartRate((uint8_t)hrmCounter);
+    htService->updateTemperature((float)htCounter);
     //or you could just cast it to unit8..this just eases debugging
     //int* ans = &hrmCounter;
 }