workss

Dependencies:   mbed BLE_API nRF51822 VL53L0X

Committer:
vazbyte
Date:
Sun Mar 24 15:37:28 2019 +0000
Revision:
48:78310b56de00
Parent:
47:eeed074999ab
comments added

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vazbyte 35:daf134714cee 1 #include <stdio.h>
vazbyte 35:daf134714cee 2 #include <math.h>
mbedAustin 0:cd5b6733aeb1 3 #include "mbed.h"
andresag 19:477567297aac 4 #include "ble/BLE.h"
vazbyte 24:931eeb8a70fc 5 #include "VL53L0X.h"
vazbyte 25:0a0805c118c0 6 #include "ble/services/HeartRateService.h"
vazbyte 31:d1ceadbc6c44 7
vazbyte 29:6ba8491c1dab 8 #define range1_addr (0x56)
vazbyte 29:6ba8491c1dab 9 #define range2_addr (0x60)
vazbyte 48:78310b56de00 10 #define range1_XSHUT p16
vazbyte 48:78310b56de00 11 #define range2_XSHUT p15
vazbyte 29:6ba8491c1dab 12 #define VL53L0_I2C_SDA p30
vazbyte 29:6ba8491c1dab 13 #define VL53L0_I2C_SCL p7
vazbyte 35:daf134714cee 14 #define TIME_SCALE 3 // sensors activated every 100ms * TIME_SCALE = 0.3 seconds
vazbyte 41:42bc4dd59417 15 #define DIST_MIN 20 // PROD
vazbyte 48:78310b56de00 16 #define DIST_MAX 120 // PROD
vazbyte 41:42bc4dd59417 17 //#define DIST_MIN 0 // DEV
vazbyte 41:42bc4dd59417 18 //#define DIST_MAX 22 // DEV
vazbyte 35:daf134714cee 19 //#define TIMESTAMP_FREQ 3000 // PROD: time granularity is 100ms * TIMESTAMP_FREQ = 5 minutes
vazbyte 35:daf134714cee 20 #define TIMESTAMP_FREQ 300 // DEV: time granularity is 100ms * TIMESTAMP_FREQ = 30 seconds
vazbyte 35:daf134714cee 21 //#define MAX_TIME 1728000 // PROD: keep track of 100ms * MAX_TIME = 2880 minutes = 2 days
vazbyte 35:daf134714cee 22 #define MAX_TIME 172800 // DEV: keep track of 100ms * MAX_TIME = 288 minutes = 4.8 hours
vazbyte 24:931eeb8a70fc 23
vazbyte 24:931eeb8a70fc 24 Serial pc(USBTX, USBRX);
vazbyte 24:931eeb8a70fc 25 static DevI2C devI2c(VL53L0_I2C_SDA, VL53L0_I2C_SCL);
vazbyte 24:931eeb8a70fc 26 DigitalOut led1(LED1);
vazbyte 24:931eeb8a70fc 27 DigitalOut led2(LED2);
vazbyte 24:931eeb8a70fc 28 DigitalOut led(LED3, 1);
vazbyte 47:eeed074999ab 29 Ticker ticker;
mbedAustin 9:b33f42191584 30 uint16_t customServiceUUID = 0xA000;
mbedAustin 13:62b1d32745ac 31 uint16_t readCharUUID = 0xA001;
mbedAustin 9:b33f42191584 32 uint16_t writeCharUUID = 0xA002;
vazbyte 31:d1ceadbc6c44 33
vazbyte 24:931eeb8a70fc 34 static DigitalOut shutdown1_pin(range1_XSHUT);
vazbyte 24:931eeb8a70fc 35 static VL53L0X range1(&devI2c, &shutdown1_pin, NC);
vazbyte 24:931eeb8a70fc 36 static DigitalOut shutdown2_pin(range2_XSHUT);
vazbyte 24:931eeb8a70fc 37 static VL53L0X range2(&devI2c, &shutdown2_pin, NC);
vazbyte 31:d1ceadbc6c44 38
vazbyte 33:3fad9e7238a4 39 uint32_t distance1, distance2;
vazbyte 33:3fad9e7238a4 40 int dist1, dist2, status1, status2;
vazbyte 38:7035f67d8105 41 int packet_queue[4000] = {0};
vazbyte 44:cd485a9baca0 42 int packet_queue_index = 2;
vazbyte 44:cd485a9baca0 43 int current_index = 0, send_count = 0, triple_send_count = 0;
vazbyte 48:78310b56de00 44
vazbyte 31:d1ceadbc6c44 45 const static int cw = 20 / TIME_SCALE;
vazbyte 35:daf134714cee 46 const static int time_cycle = TIMESTAMP_FREQ / TIME_SCALE;
vazbyte 35:daf134714cee 47 const static int maximum_time = MAX_TIME / TIMESTAMP_FREQ;
vazbyte 31:d1ceadbc6c44 48 int countdown = cw;
vazbyte 31:d1ceadbc6c44 49 bool countdown1_triggered = false, countdown2_triggered = false;
vazbyte 31:d1ceadbc6c44 50 bool step_in = false, step_out = false;
vazbyte 47:eeed074999ab 51 bool range1_triggered = false, range2_triggered = false;
vazbyte 44:cd485a9baca0 52 bool master_connected = false, connection_triggered = false;
vazbyte 44:cd485a9baca0 53 bool first_loop_run = true, enter_send_loop = true;
vazbyte 31:d1ceadbc6c44 54
vazbyte 33:3fad9e7238a4 55 const static char DEVICE_NAME[] = "OCCUPY-CRICHTON-ST";
vazbyte 33:3fad9e7238a4 56 static const uint16_t uuid16_list[] = {GattService::UUID_HEART_RATE_SERVICE};
vazbyte 35:daf134714cee 57 int * encoded_array;
vazbyte 38:7035f67d8105 58 int timestamp = time_cycle, current_time = 0;
vazbyte 31:d1ceadbc6c44 59
vazbyte 25:0a0805c118c0 60 HeartRateService *hrService;
vazbyte 26:793d65b08afb 61 uint8_t hrmCounter = 0;
vazbyte 48:78310b56de00 62
vazbyte 48:78310b56de00 63 // converts distance to cm
vazbyte 27:903ec28ea7a0 64 int format_dist(int distance) {
vazbyte 27:903ec28ea7a0 65 int result;
vazbyte 36:fb7f31e53ed9 66 if (distance > 2550)
vazbyte 36:fb7f31e53ed9 67 result = 255;
vazbyte 27:903ec28ea7a0 68 else
vazbyte 27:903ec28ea7a0 69 result = distance/10;
vazbyte 27:903ec28ea7a0 70 return result;
vazbyte 27:903ec28ea7a0 71 }
vazbyte 48:78310b56de00 72
vazbyte 48:78310b56de00 73 // starts the clock after one sensor was triggered: the next must be triggered
vazbyte 48:78310b56de00 74 // within 2 seconds for a step to be counted
vazbyte 47:eeed074999ab 75 void check_for_countdown(bool countdown_triggered) {
vazbyte 47:eeed074999ab 76 if (countdown_triggered) {
vazbyte 47:eeed074999ab 77 ::countdown--;
vazbyte 47:eeed074999ab 78 if (countdown == 0) {
vazbyte 47:eeed074999ab 79 countdown_triggered = false;
vazbyte 47:eeed074999ab 80 }
vazbyte 47:eeed074999ab 81 }
vazbyte 47:eeed074999ab 82 }
vazbyte 47:eeed074999ab 83
vazbyte 48:78310b56de00 84 // needed for the stalling of the queue after the first 4 packets are transmitted:
vazbyte 48:78310b56de00 85 // pads queue with "fake" packets that will not be transmitted
vazbyte 47:eeed074999ab 86 void optimize_transmissions(int packet_queue[]) {
vazbyte 47:eeed074999ab 87 for (int count = 4; count < 12; count++) {
vazbyte 47:eeed074999ab 88 packet_queue[count] = 1;
vazbyte 47:eeed074999ab 89 }
vazbyte 47:eeed074999ab 90 }
vazbyte 48:78310b56de00 91
vazbyte 35:daf134714cee 92 void dec_to_bin(int decimal, int bin[]) {
vazbyte 35:daf134714cee 93 int temp;
vazbyte 35:daf134714cee 94 // encoding little-endian
vazbyte 35:daf134714cee 95 for (int i = 10; i >= 0; i--) {
vazbyte 35:daf134714cee 96 temp = decimal >> i;
vazbyte 35:daf134714cee 97 bin[i] = temp&1;
vazbyte 35:daf134714cee 98 }
vazbyte 35:daf134714cee 99 }
vazbyte 48:78310b56de00 100
vazbyte 35:daf134714cee 101 int bin_to_dec(int binary) {
vazbyte 35:daf134714cee 102 int rem, temp, dec = 0, b = 1;
vazbyte 35:daf134714cee 103 temp = binary;
vazbyte 35:daf134714cee 104 while (temp > 0)
vazbyte 35:daf134714cee 105 {
vazbyte 35:daf134714cee 106 rem = temp % 10;
vazbyte 35:daf134714cee 107 dec = dec + rem * b;
vazbyte 35:daf134714cee 108 b *= 2;
vazbyte 35:daf134714cee 109 temp /= 10;
vazbyte 35:daf134714cee 110 }
vazbyte 35:daf134714cee 111 return dec;
vazbyte 35:daf134714cee 112 }
vazbyte 35:daf134714cee 113
vazbyte 48:78310b56de00 114 // creates the encoding that fits all required info into 2 bytes
vazbyte 35:daf134714cee 115 void encode_bin(int direction, int time, int encoding[]) {
vazbyte 35:daf134714cee 116 time = time % maximum_time;
vazbyte 38:7035f67d8105 117 int bin_timestamp[11] = {0};
vazbyte 38:7035f67d8105 118 dec_to_bin(time, bin_timestamp);
vazbyte 35:daf134714cee 119
vazbyte 35:daf134714cee 120 // for checking transmission errors:
vazbyte 37:5792986fea5d 121 // sending as 2 messages; designating them with 0 (1st part) and 1 (2nd part)
vazbyte 35:daf134714cee 122 encoding [8] = 1;
vazbyte 35:daf134714cee 123 encoding [0] = 0;
vazbyte 48:78310b56de00 124
vazbyte 35:daf134714cee 125 // used to send the current time when Bluetooth connection established
vazbyte 35:daf134714cee 126 if (direction == -1) {
vazbyte 35:daf134714cee 127 encoding[15] = 1;
vazbyte 35:daf134714cee 128 encoding[7] = 1;
vazbyte 35:daf134714cee 129
vazbyte 35:daf134714cee 130 } else {
vazbyte 35:daf134714cee 131 encoding[15] = 0;
vazbyte 35:daf134714cee 132 encoding[7] = 0;
vazbyte 35:daf134714cee 133
vazbyte 35:daf134714cee 134 // to distinguish whether movement was IN (1) or OUT (0)
vazbyte 35:daf134714cee 135 if (direction == 1) {
vazbyte 35:daf134714cee 136 encoding[1] = 1;
vazbyte 35:daf134714cee 137 } else {
vazbyte 35:daf134714cee 138 encoding[1] = 0;
vazbyte 35:daf134714cee 139 }
vazbyte 35:daf134714cee 140 }
vazbyte 35:daf134714cee 141
vazbyte 43:037b59837599 142 int count = 10;
vazbyte 43:037b59837599 143 for (int i = 14; i >= 2; i--) {
vazbyte 43:037b59837599 144 if (i == 8 || i == 7) { }
vazbyte 43:037b59837599 145 else {
vazbyte 43:037b59837599 146 encoding[i] = bin_timestamp[count];
vazbyte 43:037b59837599 147 count--;
vazbyte 35:daf134714cee 148 }
vazbyte 43:037b59837599 149 }
vazbyte 35:daf134714cee 150 }
vazbyte 48:78310b56de00 151
vazbyte 48:78310b56de00 152 // converts the binary encoding back into 2 byte-sized packets
vazbyte 35:daf134714cee 153 void create_packets(int encoding[], double& packet1, double& packet2) {
vazbyte 35:daf134714cee 154 double binary1 = 0, binary2 = 0;
vazbyte 35:daf134714cee 155 for (int i = 0; i < 8; i++) {
vazbyte 35:daf134714cee 156 binary1 += encoding[i] * pow(10, (double)i);
vazbyte 35:daf134714cee 157 binary2 += encoding[8+i] * pow(10, (double)i);
vazbyte 35:daf134714cee 158 }
vazbyte 35:daf134714cee 159 packet1 = bin_to_dec(binary1);
vazbyte 35:daf134714cee 160 packet2 = bin_to_dec(binary2);
vazbyte 35:daf134714cee 161 }
vazbyte 48:78310b56de00 162
vazbyte 44:cd485a9baca0 163 void send_packet() {
vazbyte 44:cd485a9baca0 164 hrmCounter = packet_queue[current_index];
vazbyte 44:cd485a9baca0 165 hrService->updateHeartRate(hrmCounter);
vazbyte 48:78310b56de00 166 printf("sent packet %i\r\n", hrmCounter);
vazbyte 44:cd485a9baca0 167 ::current_index++;
vazbyte 44:cd485a9baca0 168 }
vazbyte 48:78310b56de00 169
vazbyte 48:78310b56de00 170 // steps are added to a queue to be sent as soon as the gateway connects
vazbyte 47:eeed074999ab 171 void enqueue_packet(int direction, int time, int packet_queue[], int priority) {
vazbyte 36:fb7f31e53ed9 172 int encoding [16] = {0};
vazbyte 36:fb7f31e53ed9 173 encode_bin(direction, time, encoding);
vazbyte 36:fb7f31e53ed9 174 double packet1, packet2;
vazbyte 36:fb7f31e53ed9 175 create_packets(encoding, packet1, packet2);
vazbyte 36:fb7f31e53ed9 176 int p1 = (int)packet1;
vazbyte 36:fb7f31e53ed9 177 int p2 = (int)packet2;
vazbyte 44:cd485a9baca0 178
vazbyte 47:eeed074999ab 179 if (priority == 1) {
vazbyte 47:eeed074999ab 180 packet_queue[0] = p1;
vazbyte 47:eeed074999ab 181 packet_queue[1] = p2;
vazbyte 47:eeed074999ab 182
vazbyte 48:78310b56de00 183 printf("sudo enqueued packet %i\r\n", packet_queue[0]);
vazbyte 48:78310b56de00 184 printf("sudo enqueued packet %i\r\n", packet_queue[1]);
vazbyte 47:eeed074999ab 185 } else {
vazbyte 47:eeed074999ab 186 if (packet_queue_index == 4) {
vazbyte 47:eeed074999ab 187 ::packet_queue_index = 12;
vazbyte 47:eeed074999ab 188 }
vazbyte 47:eeed074999ab 189 packet_queue[packet_queue_index] = p1;
vazbyte 47:eeed074999ab 190 packet_queue[packet_queue_index + 1] = p2;
vazbyte 47:eeed074999ab 191
vazbyte 48:78310b56de00 192 printf("enqueued packet %i\r\n", packet_queue[packet_queue_index]);
vazbyte 48:78310b56de00 193 printf("enqueued packet %i\r\n", packet_queue[packet_queue_index+1]);
vazbyte 47:eeed074999ab 194
vazbyte 47:eeed074999ab 195 ::packet_queue_index += 2;
vazbyte 47:eeed074999ab 196 }
vazbyte 47:eeed074999ab 197 }
vazbyte 48:78310b56de00 198
vazbyte 48:78310b56de00 199 // the end of the queue transmission is signalled so gateway users know
vazbyte 48:78310b56de00 200 // when it is safe to disconnect
vazbyte 47:eeed074999ab 201 void enqueue_transmission_break() {
vazbyte 47:eeed074999ab 202 int p1 = 0;
vazbyte 47:eeed074999ab 203 int p2 = 0;
vazbyte 47:eeed074999ab 204
vazbyte 44:cd485a9baca0 205 packet_queue[packet_queue_index] = p1;
vazbyte 44:cd485a9baca0 206 packet_queue[packet_queue_index + 1] = p2;
vazbyte 48:78310b56de00 207 printf("enqueued transmission breaks %i and %i\r\n", packet_queue[packet_queue_index], packet_queue[packet_queue_index+1]);
vazbyte 44:cd485a9baca0 208
vazbyte 44:cd485a9baca0 209 ::packet_queue_index += 2;
vazbyte 36:fb7f31e53ed9 210 }
vazbyte 48:78310b56de00 211
vazbyte 48:78310b56de00 212 // adapted from code found at https://os.mbed.com/users/jkjk010695/code/Multi_VL53L0X/
vazbyte 48:78310b56de00 213 // checks sensor readings to determine whether a step has been taken
vazbyte 47:eeed074999ab 214 void check_for_step(int direction, int status, int dist, DigitalOut led, bool& this_countdown_triggered,
vazbyte 47:eeed074999ab 215 bool& other_countdown_triggered, bool& this_range_triggered, bool& other_range_triggered,
vazbyte 47:eeed074999ab 216 int packet_queue[]) {
vazbyte 47:eeed074999ab 217 if (status == VL53L0X_ERROR_NONE) {
vazbyte 47:eeed074999ab 218 if (dist > DIST_MIN && dist < DIST_MAX) {
vazbyte 47:eeed074999ab 219 ::connection_triggered = true;
vazbyte 47:eeed074999ab 220 led = 0;
vazbyte 47:eeed074999ab 221 printf("Range%i [mm]: %6ld\r\n", direction+1, dist);
vazbyte 47:eeed074999ab 222 if (!this_countdown_triggered && !other_countdown_triggered) {
vazbyte 47:eeed074999ab 223 this_countdown_triggered = true;
vazbyte 47:eeed074999ab 224 ::countdown = cw;
vazbyte 47:eeed074999ab 225 } else if (other_countdown_triggered && !this_range_triggered) {
vazbyte 48:78310b56de00 226 printf("STEP %i DETECTED\r\n", direction);
vazbyte 47:eeed074999ab 227 enqueue_packet(direction, current_time, packet_queue, 0);
vazbyte 47:eeed074999ab 228 other_countdown_triggered = false;
vazbyte 47:eeed074999ab 229 }
vazbyte 47:eeed074999ab 230 this_range_triggered = true;
vazbyte 47:eeed074999ab 231 } else {
vazbyte 47:eeed074999ab 232 led = 1;
vazbyte 47:eeed074999ab 233 this_range_triggered = false;
vazbyte 47:eeed074999ab 234 }
vazbyte 47:eeed074999ab 235 } else {
vazbyte 47:eeed074999ab 236 led = 1;
vazbyte 48:78310b56de00 237 this_range_triggered = false;
vazbyte 47:eeed074999ab 238 }
vazbyte 38:7035f67d8105 239 }
vazbyte 48:78310b56de00 240
vazbyte 48:78310b56de00 241 // when connected to gateway, the HEAD and TAIL are added to the queue
vazbyte 36:fb7f31e53ed9 242 void connectionCallback(const Gap::ConnectionCallbackParams_t *) {
vazbyte 48:78310b56de00 243 printf("Bluetooth connected at %i\r\n", current_time);
vazbyte 38:7035f67d8105 244 ::master_connected = true;
vazbyte 44:cd485a9baca0 245 ::connection_triggered = false;
vazbyte 47:eeed074999ab 246 enqueue_packet(-1, current_time, packet_queue, 1);
vazbyte 47:eeed074999ab 247 enqueue_transmission_break();
vazbyte 43:037b59837599 248 BLE::Instance(BLE::DEFAULT_INSTANCE).gap().stopAdvertising();
vazbyte 44:cd485a9baca0 249 wait(5);
vazbyte 36:fb7f31e53ed9 250 }
vazbyte 36:fb7f31e53ed9 251
vazbyte 48:78310b56de00 252 // when disconnected from gateway, all variables reset to the initial state
vazbyte 48:78310b56de00 253 // as though system had restarted
vazbyte 36:fb7f31e53ed9 254 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *)
vazbyte 36:fb7f31e53ed9 255 {
vazbyte 48:78310b56de00 256 printf("Bluetooth disconnected at %i\r\n", current_time);
vazbyte 38:7035f67d8105 257 ::master_connected = false;
vazbyte 39:067ba1a475a5 258 ::timestamp = time_cycle;
vazbyte 44:cd485a9baca0 259 ::current_index = 0;
vazbyte 44:cd485a9baca0 260 ::packet_queue_index = 2;
vazbyte 44:cd485a9baca0 261 ::send_count = 0;
vazbyte 44:cd485a9baca0 262 ::triple_send_count = 0;
vazbyte 36:fb7f31e53ed9 263 BLE::Instance(BLE::DEFAULT_INSTANCE).gap().startAdvertising();
vazbyte 36:fb7f31e53ed9 264 }
vazbyte 48:78310b56de00 265
vazbyte 48:78310b56de00 266 // standard BLE init code found at https://os.mbed.com/teams/Bluetooth-Low-Energy/code/BLE_HeartRate/
vazbyte 36:fb7f31e53ed9 267 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
vazbyte 36:fb7f31e53ed9 268 {
vazbyte 36:fb7f31e53ed9 269 BLE &ble = params->ble;
vazbyte 36:fb7f31e53ed9 270 ble_error_t error = params->error;
vazbyte 36:fb7f31e53ed9 271
vazbyte 36:fb7f31e53ed9 272 if (error != BLE_ERROR_NONE) {
vazbyte 36:fb7f31e53ed9 273 return;
vazbyte 36:fb7f31e53ed9 274 }
vazbyte 36:fb7f31e53ed9 275
vazbyte 36:fb7f31e53ed9 276 ble.gap().onConnection(connectionCallback);
vazbyte 36:fb7f31e53ed9 277 ble.gap().onDisconnection(disconnectionCallback);
vazbyte 36:fb7f31e53ed9 278 hrService = new HeartRateService(ble, hrmCounter, HeartRateService::LOCATION_FINGER);
vazbyte 36:fb7f31e53ed9 279
vazbyte 36:fb7f31e53ed9 280 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
vazbyte 36:fb7f31e53ed9 281 ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
vazbyte 36:fb7f31e53ed9 282 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
vazbyte 36:fb7f31e53ed9 283 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list));
vazbyte 36:fb7f31e53ed9 284 ble.gap().setAdvertisingInterval(100);
vazbyte 36:fb7f31e53ed9 285 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::GENERIC_HEART_RATE_SENSOR);
vazbyte 36:fb7f31e53ed9 286
vazbyte 36:fb7f31e53ed9 287 ble.gap().startAdvertising();
vazbyte 36:fb7f31e53ed9 288 }
vazbyte 31:d1ceadbc6c44 289
vazbyte 48:78310b56de00 290 // called every 300ms to check whether a step has been taken and whether there
vazbyte 48:78310b56de00 291 // is anything to be transmitted
vazbyte 23:52e8e05df60c 292 void wakeup_event_cb() {
vazbyte 38:7035f67d8105 293 ::timestamp++;
vazbyte 35:daf134714cee 294 ::current_time = timestamp / time_cycle;
vazbyte 24:931eeb8a70fc 295
vazbyte 46:a8013e7450b2 296 if (send_count % 2 == 0) {
vazbyte 44:cd485a9baca0 297 if (enter_send_loop && connection_triggered && (current_index < packet_queue_index) && master_connected) {
vazbyte 44:cd485a9baca0 298 send_packet();
vazbyte 44:cd485a9baca0 299 }
vazbyte 44:cd485a9baca0 300 ::triple_send_count++;
vazbyte 44:cd485a9baca0 301 }
vazbyte 44:cd485a9baca0 302 ::send_count++;
vazbyte 42:f28240f996dd 303
vazbyte 44:cd485a9baca0 304 if ((triple_send_count / 4) % 3 == 0) {
vazbyte 44:cd485a9baca0 305 ::enter_send_loop = true;
vazbyte 44:cd485a9baca0 306 } else {
vazbyte 44:cd485a9baca0 307 ::enter_send_loop = false;
vazbyte 42:f28240f996dd 308 }
vazbyte 42:f28240f996dd 309
vazbyte 47:eeed074999ab 310 check_for_countdown(countdown1_triggered);
vazbyte 47:eeed074999ab 311 check_for_countdown(countdown2_triggered);
vazbyte 31:d1ceadbc6c44 312
vazbyte 24:931eeb8a70fc 313 status1 = range1.get_distance(&distance1);
vazbyte 24:931eeb8a70fc 314 status2 = range2.get_distance(&distance2);
vazbyte 26:793d65b08afb 315
vazbyte 27:903ec28ea7a0 316 dist1 = format_dist(distance1);
vazbyte 27:903ec28ea7a0 317 dist2 = format_dist(distance2);
vazbyte 31:d1ceadbc6c44 318
vazbyte 47:eeed074999ab 319 check_for_step(1, status1, dist1, led1, countdown1_triggered, countdown2_triggered,
vazbyte 47:eeed074999ab 320 range1_triggered, range2_triggered, packet_queue);
vazbyte 47:eeed074999ab 321 check_for_step(0, status2, dist2, led2, countdown2_triggered, countdown1_triggered,
vazbyte 47:eeed074999ab 322 range2_triggered, range1_triggered, packet_queue);
vazbyte 23:52e8e05df60c 323 }
vazbyte 31:d1ceadbc6c44 324
vazbyte 48:78310b56de00 325 // system put to sleep by waitForEvent() call and periodically interrupted
vazbyte 48:78310b56de00 326 // by Ticker to check for steps and packets to send
andresag 22:406127954d1f 327 int main(void)
andresag 22:406127954d1f 328 {
vazbyte 24:931eeb8a70fc 329 range1.init_sensor(range1_addr);
vazbyte 24:931eeb8a70fc 330 range2.init_sensor(range2_addr);
vazbyte 24:931eeb8a70fc 331
vazbyte 47:eeed074999ab 332 optimize_transmissions(packet_queue);
vazbyte 44:cd485a9baca0 333
andresag 22:406127954d1f 334 BLE& ble = BLE::Instance(BLE::DEFAULT_INSTANCE);
andresag 22:406127954d1f 335 ble.init(bleInitComplete);
andresag 22:406127954d1f 336
vazbyte 31:d1ceadbc6c44 337 ticker.attach(wakeup_event_cb, 0.1 * TIME_SCALE);
vazbyte 24:931eeb8a70fc 338
vazbyte 23:52e8e05df60c 339 while (ble.hasInitialized()) {
vazbyte 24:931eeb8a70fc 340 ble.waitForEvent();
mbedAustin 2:e84c13abc479 341 }
andresag 20:fcc752d401ec 342 }