workss

Dependencies:   mbed BLE_API nRF51822 VL53L0X

Committer:
vazbyte
Date:
Wed Mar 13 14:19:08 2019 +0000
Revision:
27:903ec28ea7a0
Parent:
26:793d65b08afb
Child:
28:ca14866eec64
removed unnecessary imports

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbedAustin 0:cd5b6733aeb1 1 #include "mbed.h"
andresag 19:477567297aac 2 #include "ble/BLE.h"
vazbyte 24:931eeb8a70fc 3 #include "VL53L0X.h"
vazbyte 25:0a0805c118c0 4 #include "ble/services/HeartRateService.h"
mbedAustin 1:94152e7d8b5c 5
vazbyte 24:931eeb8a70fc 6 #define range1_addr (0x56)
vazbyte 24:931eeb8a70fc 7 #define range2_addr (0x60)
vazbyte 24:931eeb8a70fc 8 #define range1_XSHUT p15
vazbyte 24:931eeb8a70fc 9 #define range2_XSHUT p16
vazbyte 24:931eeb8a70fc 10 #define VL53L0_I2C_SDA p30
vazbyte 24:931eeb8a70fc 11 #define VL53L0_I2C_SCL p7
vazbyte 24:931eeb8a70fc 12
vazbyte 24:931eeb8a70fc 13 Serial pc(USBTX, USBRX);
vazbyte 24:931eeb8a70fc 14 static DevI2C devI2c(VL53L0_I2C_SDA, VL53L0_I2C_SCL);
vazbyte 24:931eeb8a70fc 15 DigitalOut led1(LED1);
vazbyte 24:931eeb8a70fc 16 DigitalOut led2(LED2);
vazbyte 24:931eeb8a70fc 17 DigitalOut led(LED3, 1);
mbedAustin 9:b33f42191584 18 uint16_t customServiceUUID = 0xA000;
mbedAustin 13:62b1d32745ac 19 uint16_t readCharUUID = 0xA001;
mbedAustin 9:b33f42191584 20 uint16_t writeCharUUID = 0xA002;
mbedAustin 1:94152e7d8b5c 21
vazbyte 24:931eeb8a70fc 22 static DigitalOut shutdown1_pin(range1_XSHUT);
vazbyte 24:931eeb8a70fc 23 static VL53L0X range1(&devI2c, &shutdown1_pin, NC);
vazbyte 24:931eeb8a70fc 24 static DigitalOut shutdown2_pin(range2_XSHUT);
vazbyte 24:931eeb8a70fc 25 static VL53L0X range2(&devI2c, &shutdown2_pin, NC);
vazbyte 24:931eeb8a70fc 26
vazbyte 24:931eeb8a70fc 27 uint32_t distance1;
vazbyte 24:931eeb8a70fc 28 uint32_t distance2;
vazbyte 27:903ec28ea7a0 29 int dist1;
vazbyte 27:903ec28ea7a0 30 int dist2;
vazbyte 24:931eeb8a70fc 31 int status1;
vazbyte 24:931eeb8a70fc 32 int status2;
vazbyte 24:931eeb8a70fc 33
vazbyte 23:52e8e05df60c 34 const static char DEVICE_NAME[] = "OCCUPY-CRICHTON-ST"; // change this
vazbyte 25:0a0805c118c0 35 static const uint16_t uuid16_list[] = {GattService::UUID_HEART_RATE_SERVICE}; //Custom UUID, FFFF is reserved for development
vazbyte 25:0a0805c118c0 36
vazbyte 25:0a0805c118c0 37 HeartRateService *hrService;
vazbyte 26:793d65b08afb 38 uint8_t hrmCounter = 0;
mbedAustin 2:e84c13abc479 39
andresag 19:477567297aac 40 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *)
mbedAustin 1:94152e7d8b5c 41 {
andresag 22:406127954d1f 42 BLE::Instance(BLE::DEFAULT_INSTANCE).gap().startAdvertising();
mbedAustin 1:94152e7d8b5c 43 }
mbedAustin 0:cd5b6733aeb1 44
andresag 22:406127954d1f 45 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
andresag 22:406127954d1f 46 {
andresag 22:406127954d1f 47 BLE &ble = params->ble;
andresag 22:406127954d1f 48 ble_error_t error = params->error;
andresag 22:406127954d1f 49
andresag 22:406127954d1f 50 if (error != BLE_ERROR_NONE) {
andresag 22:406127954d1f 51 return;
andresag 22:406127954d1f 52 }
mbedAustin 0:cd5b6733aeb1 53
andresag 19:477567297aac 54 ble.gap().onDisconnection(disconnectionCallback);
vazbyte 25:0a0805c118c0 55 hrService = new HeartRateService(ble, hrmCounter, HeartRateService::LOCATION_FINGER);
mbedAustin 2:e84c13abc479 56
andresag 19:477567297aac 57 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); // BLE only, no classic BT
andresag 19:477567297aac 58 ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); // advertising type
andresag 19:477567297aac 59 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); // add name
andresag 19:477567297aac 60 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list)); // UUID's broadcast in advertising packet
andresag 19:477567297aac 61 ble.gap().setAdvertisingInterval(100); // 100ms.
vazbyte 25:0a0805c118c0 62 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::GENERIC_HEART_RATE_SENSOR);
mbedAustin 2:e84c13abc479 63
andresag 19:477567297aac 64 ble.gap().startAdvertising();
andresag 22:406127954d1f 65 }
vazbyte 27:903ec28ea7a0 66
vazbyte 27:903ec28ea7a0 67 int format_dist(int distance) {
vazbyte 27:903ec28ea7a0 68 // local variable declaration
vazbyte 27:903ec28ea7a0 69 int result;
vazbyte 27:903ec28ea7a0 70
vazbyte 27:903ec28ea7a0 71 if (distance > 1270)
vazbyte 27:903ec28ea7a0 72 result = 127;
vazbyte 27:903ec28ea7a0 73 else
vazbyte 27:903ec28ea7a0 74 result = distance/10;
vazbyte 27:903ec28ea7a0 75
vazbyte 27:903ec28ea7a0 76 return result;
vazbyte 27:903ec28ea7a0 77 }
vazbyte 27:903ec28ea7a0 78
vazbyte 23:52e8e05df60c 79 void wakeup_event_cb() {
vazbyte 23:52e8e05df60c 80 led != led;
vazbyte 24:931eeb8a70fc 81
vazbyte 24:931eeb8a70fc 82 status1 = range1.get_distance(&distance1);
vazbyte 24:931eeb8a70fc 83 status2 = range2.get_distance(&distance2);
vazbyte 26:793d65b08afb 84
vazbyte 27:903ec28ea7a0 85 dist1 = format_dist(distance1);
vazbyte 27:903ec28ea7a0 86 dist2 = format_dist(distance2);
vazbyte 27:903ec28ea7a0 87
vazbyte 24:931eeb8a70fc 88 if (status1 == VL53L0X_ERROR_NONE) {
vazbyte 27:903ec28ea7a0 89 printf("Range1 [mm]: %6ld\r\n", dist1);
vazbyte 27:903ec28ea7a0 90 if (dist1 > 4 && dist1 < 220) {
vazbyte 24:931eeb8a70fc 91 led1 = 0;
vazbyte 27:903ec28ea7a0 92 hrmCounter = dist1;
vazbyte 27:903ec28ea7a0 93 hrService->updateHeartRate(hrmCounter);
vazbyte 24:931eeb8a70fc 94 }
vazbyte 24:931eeb8a70fc 95 else {
vazbyte 24:931eeb8a70fc 96 led1 = 1;
vazbyte 24:931eeb8a70fc 97 }
vazbyte 24:931eeb8a70fc 98 } else {
vazbyte 24:931eeb8a70fc 99 printf("Range1 [mm]: --\r\n");
vazbyte 24:931eeb8a70fc 100 led1 = 1;
vazbyte 24:931eeb8a70fc 101 }
vazbyte 24:931eeb8a70fc 102 if (status2 == VL53L0X_ERROR_NONE) {
vazbyte 27:903ec28ea7a0 103 printf("Range2 [mm]: %6ld\r\n", dist2);
vazbyte 27:903ec28ea7a0 104 if (dist2 > 4 && dist2 < 220) {
vazbyte 27:903ec28ea7a0 105 led2 = 0;
vazbyte 27:903ec28ea7a0 106 hrmCounter = dist2;
vazbyte 27:903ec28ea7a0 107 hrService->updateHeartRate(hrmCounter);
vazbyte 27:903ec28ea7a0 108 }
vazbyte 24:931eeb8a70fc 109 } else {
vazbyte 24:931eeb8a70fc 110 printf("Range2 [mm]: --\r\n");
vazbyte 24:931eeb8a70fc 111 led2 = 1;
vazbyte 24:931eeb8a70fc 112 }
vazbyte 23:52e8e05df60c 113 }
andresag 19:477567297aac 114
andresag 22:406127954d1f 115 int main(void)
andresag 22:406127954d1f 116 {
vazbyte 24:931eeb8a70fc 117 range1.init_sensor(range1_addr);
vazbyte 24:931eeb8a70fc 118 range2.init_sensor(range2_addr);
vazbyte 24:931eeb8a70fc 119
andresag 22:406127954d1f 120 printf("\n\r********* Starting Main Loop *********\n\r");
vazbyte 24:931eeb8a70fc 121
andresag 22:406127954d1f 122 BLE& ble = BLE::Instance(BLE::DEFAULT_INSTANCE);
andresag 22:406127954d1f 123 ble.init(bleInitComplete);
andresag 22:406127954d1f 124
vazbyte 23:52e8e05df60c 125 Ticker ticker;
vazbyte 24:931eeb8a70fc 126
vazbyte 23:52e8e05df60c 127 ticker.attach(wakeup_event_cb, 0.3);
vazbyte 24:931eeb8a70fc 128
vazbyte 23:52e8e05df60c 129 while (ble.hasInitialized()) {
vazbyte 24:931eeb8a70fc 130 ble.waitForEvent();
mbedAustin 2:e84c13abc479 131 }
andresag 20:fcc752d401ec 132 }