I've got some basic filter code setup (but not yet tested).
Dependencies: BLE_API Queue mbed nRF51822
Fork of BLE_HeartRate by
Diff: main.cpp
- 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 {