workss
Dependencies: mbed BLE_API nRF51822 VL53L0X
Diff: main.cpp
- 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();