workss
Dependencies: mbed BLE_API nRF51822 VL53L0X
Diff: main.cpp
- Revision:
- 35:daf134714cee
- Parent:
- 34:1d3818f8c1a1
- Child:
- 36:fb7f31e53ed9
--- a/main.cpp Thu Mar 14 14:19:14 2019 +0000 +++ b/main.cpp Thu Mar 14 19:42:18 2019 +0000 @@ -1,3 +1,5 @@ +#include <stdio.h> +#include <math.h> #include "mbed.h" #include "ble/BLE.h" #include "VL53L0X.h" @@ -9,9 +11,13 @@ #define range2_XSHUT p16 #define VL53L0_I2C_SDA p30 #define VL53L0_I2C_SCL p7 -#define TIME_SCALE 3 // sensors activated every 100ms * TIME_SCALE +#define TIME_SCALE 3 // sensors activated every 100ms * TIME_SCALE = 0.3 seconds #define DIST_MIN 0 #define DIST_MAX 22 +//#define TIMESTAMP_FREQ 3000 // PROD: time granularity is 100ms * TIMESTAMP_FREQ = 5 minutes +#define TIMESTAMP_FREQ 300 // DEV: time granularity is 100ms * TIMESTAMP_FREQ = 30 seconds +//#define MAX_TIME 1728000 // PROD: keep track of 100ms * MAX_TIME = 2880 minutes = 2 days +#define MAX_TIME 172800 // DEV: keep track of 100ms * MAX_TIME = 288 minutes = 4.8 hours Serial pc(USBTX, USBRX); static DevI2C devI2c(VL53L0_I2C_SDA, VL53L0_I2C_SCL); @@ -29,8 +35,11 @@ uint32_t distance1, distance2; int dist1, dist2, status1, status2; +int timestamp = 0, current_time = 0; const static int cw = 20 / TIME_SCALE; +const static int time_cycle = TIMESTAMP_FREQ / TIME_SCALE; +const static int maximum_time = MAX_TIME / TIMESTAMP_FREQ; int countdown = cw; bool countdown1_triggered = false, countdown2_triggered = false; bool step_in = false, step_out = false; @@ -38,17 +47,18 @@ const static char DEVICE_NAME[] = "OCCUPY-CRICHTON-ST"; static const uint16_t uuid16_list[] = {GattService::UUID_HEART_RATE_SERVICE}; +int * encoded_array; HeartRateService *hrService; uint8_t hrmCounter = 0; void connectionCallback(const Gap::ConnectionCallbackParams_t *) { - printf("Bluetooth connected\n"); + printf("Bluetooth connected at %i\n", current_time); } void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *) { - printf("Bluetooth disconnected\n"); + printf("Bluetooth disconnected at %i\n", current_time); BLE::Instance(BLE::DEFAULT_INSTANCE).gap().startAdvertising(); } @@ -85,9 +95,83 @@ return result; } + +void dec_to_bin(int decimal, int bin[]) { + int temp; + // encoding little-endian + for (int i = 10; i >= 0; i--) { + temp = decimal >> i; + bin[i] = temp&1; + } +} + +int bin_to_dec(int binary) { + int rem, temp, dec = 0, b = 1; + temp = binary; + while (temp > 0) + { + rem = temp % 10; + dec = dec + rem * b; + b *= 2; + temp /= 10; + } +// printf("The decimal equivalent of %i is %i", num, dec); + return dec; +} + +void encode_bin(int direction, int time, int encoding[]) { + time = time % maximum_time; + int bin[11] = {0}; + dec_to_bin(time, bin); + + // for checking transmission errors: + // sending as 2 messages; designating them with 0 (1st part) and 1`(2nd part) + encoding [8] = 1; + encoding [0] = 0; + + // used to send the current time when Bluetooth connection established + if (direction == -1) { + encoding[15] = 1; + encoding[7] = 1; + + } else { + encoding[15] = 0; + encoding[7] = 0; + + // to distinguish whether movement was IN (1) or OUT (0) + if (direction == 1) { + encoding[1] = 1; + } else { + encoding[1] = 0; + } + } + + int count = 10; + for (int i = 14; i >= 2; i--) { + if (i == 8 || i == 7) { } + else { + encoding[i] = bin[count]; + count--; + } + } +} + +void create_packets(int encoding[], double& packet1, double& packet2) { + double binary1 = 0, binary2 = 0; + for (int i = 0; i < 8; i++) { + binary1 += encoding[i] * pow(10, (double)i); + binary2 += encoding[8+i] * pow(10, (double)i); + } + packet1 = bin_to_dec(binary1); + packet2 = bin_to_dec(binary2); +} void wakeup_event_cb() { + + int encoding [16] = {0}; led != led; + timestamp++; + ::current_time = timestamp / time_cycle; if (countdown1_triggered) { countdown--; @@ -109,7 +193,7 @@ 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; @@ -135,7 +219,7 @@ range2_just_triggered = false; } if (status2 == VL53L0X_ERROR_NONE) { - printf("Range2 [mm]: %6ld\r\n", dist2); +// printf("Range2 [mm]: %6ld\r\n", dist2); if (dist2 > DIST_MIN && dist2 < DIST_MAX) { led2 = 0;