Skip to content

Commit

Permalink
Correction to speed estimate
Browse files Browse the repository at this point in the history
  • Loading branch information
ajs123 committed Mar 12, 2022
1 parent 88a5e6a commit 01a63b9
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 9 deletions.
48 changes: 48 additions & 0 deletions .vscode/c_cpp_properties.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,34 @@
],
"intelliSenseMode": "gcc-x64",
"includePath": [
"/Users/alan/Library/Arduino15/packages/adafruit/tools/CMSIS/5.7.0/CMSIS/Core/Include/",
"/Users/alan/Library/Arduino15/packages/adafruit/tools/CMSIS/5.7.0/CMSIS/DSP/Include/",
"/Users/alan/Library/Arduino15/packages/adafruit/hardware/nrf52/1.3.0/cores/nRF5/nordic",
"/Users/alan/Library/Arduino15/packages/adafruit/hardware/nrf52/1.3.0/cores/nRF5/nordic/nrfx",
"/Users/alan/Library/Arduino15/packages/adafruit/hardware/nrf52/1.3.0/cores/nRF5/nordic/nrfx/hal",
"/Users/alan/Library/Arduino15/packages/adafruit/hardware/nrf52/1.3.0/cores/nRF5/nordic/nrfx/mdk",
"/Users/alan/Library/Arduino15/packages/adafruit/hardware/nrf52/1.3.0/cores/nRF5/nordic/nrfx/soc",
"/Users/alan/Library/Arduino15/packages/adafruit/hardware/nrf52/1.3.0/cores/nRF5/nordic/nrfx/drivers/include",
"/Users/alan/Library/Arduino15/packages/adafruit/hardware/nrf52/1.3.0/cores/nRF5/nordic/nrfx/drivers/src",
"/Users/alan/Library/Arduino15/packages/adafruit/hardware/nrf52/1.3.0/cores/nRF5/nordic/softdevice/s140_nrf52_6.1.1_API/include",
"/Users/alan/Library/Arduino15/packages/adafruit/hardware/nrf52/1.3.0/cores/nRF5/nordic/softdevice/s140_nrf52_6.1.1_API/include/nrf52",
"/Users/alan/Library/Arduino15/packages/adafruit/hardware/nrf52/1.3.0/cores/nRF5/freertos/Source/include",
"/Users/alan/Library/Arduino15/packages/adafruit/hardware/nrf52/1.3.0/cores/nRF5/freertos/config",
"/Users/alan/Library/Arduino15/packages/adafruit/hardware/nrf52/1.3.0/cores/nRF5/freertos/portable/GCC/nrf52",
"/Users/alan/Library/Arduino15/packages/adafruit/hardware/nrf52/1.3.0/cores/nRF5/freertos/portable/CMSIS/nrf52",
"/Users/alan/Library/Arduino15/packages/adafruit/hardware/nrf52/1.3.0/cores/nRF5/sysview/SEGGER",
"/Users/alan/Library/Arduino15/packages/adafruit/hardware/nrf52/1.3.0/cores/nRF5/sysview/Config",
"/Users/alan/Library/Arduino15/packages/adafruit/hardware/nrf52/1.3.0/libraries/Adafruit_TinyUSB_Arduino/src/arduino",
"/Users/alan/Library/Arduino15/packages/adafruit/hardware/nrf52/1.3.0/cores/nRF5",
"/Users/alan/Library/Arduino15/packages/adafruit/hardware/nrf52/1.3.0/variants/feather_nrf52840_express",
"/Users/alan/Library/Arduino15/packages/adafruit/hardware/nrf52/1.3.0/libraries/Bluefruit52Lib/src",
"/Users/alan/Library/Arduino15/packages/adafruit/hardware/nrf52/1.3.0/libraries/Adafruit_nRFCrypto/src",
"/Users/alan/Library/Arduino15/packages/adafruit/hardware/nrf52/1.3.0/libraries/Adafruit_TinyUSB_Arduino/src",
"/Users/alan/Dropbox (Personal)/Arduino/libraries/U8g2/src",
"/Users/alan/Library/Arduino15/packages/adafruit/hardware/nrf52/1.3.0/libraries/SPI",
"/Users/alan/Library/Arduino15/packages/adafruit/hardware/nrf52/1.3.0/libraries/Wire",
"/Users/alan/Library/Arduino15/packages/adafruit/hardware/nrf52/1.3.0/libraries/Adafruit_LittleFS/src",
"/Users/alan/Library/Arduino15/packages/adafruit/hardware/nrf52/1.3.0/libraries/InternalFileSytem/src",
"/Users/alan/Library/Arduino15/packages/adafruit/tools/CMSIS/5.7.0/CMSIS/Core/Include/",
"/Users/alan/Library/Arduino15/packages/adafruit/tools/CMSIS/5.7.0/CMSIS/DSP/Include/",
"/Users/alan/Library/Arduino15/packages/adafruit/hardware/nrf52/1.3.0/cores/nRF5/nordic",
Expand Down Expand Up @@ -63,6 +91,26 @@
"cStandard": "c11",
"cppStandard": "c++11",
"defines": [
"F_CPU=64000000",
"ARDUINO=10607",
"ARDUINO_NRF52840_FEATHER",
"ARDUINO_ARCH_NRF52",
"ARDUINO_BSP_VERSION=\"1.3.0\"",
"NRF52840_XXAA",
"USBCON",
"USE_TINYUSB",
"USB_VID=0x239A",
"USB_PID=0x8029",
"USB_MANUFACTURER=\"Adafruit\"",
"USB_PRODUCT=\"Feather nRF52840 Express\"",
"SOFTDEVICE_PRESENT",
"ARDUINO_NRF52_ADAFRUIT",
"NRF52_SERIES",
"DX_CC_TEE",
"LFS_NAME_MAX=64",
"CFG_DEBUG=0",
"CFG_LOGGER=0",
"CFG_SYSVIEW=0",
"F_CPU=64000000",
"ARDUINO=10607",
"ARDUINO_NRF52840_FEATHER",
Expand Down
4 changes: 2 additions & 2 deletions BLE_services.h
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ struct power_data_t
2 = 1 - Instantaneous cadence present
1 = 0 - Average speed present
0 = 0 - More Data (Instantaneous speed field not present)
B1 = UINT 8
B1 = UINT8
4 = 0 - Remaining time present
3 = 0 - Elapsed time present
2 = 0 - Metabolic equivalent present
Expand All @@ -150,7 +150,7 @@ struct power_data_t
struct bike_data_t
{
uint8_t flags[2] {0b01000100, 0b00000000}; // These don't change
uint16_t data[4]; // These are loaded with the data
uint16_t data[3]; // These are loaded with the data
} bike_data;

#endif
16 changes: 9 additions & 7 deletions KBikeBLE.ino
Original file line number Diff line number Diff line change
Expand Up @@ -946,19 +946,21 @@ void process_crank_event()

#ifdef PROVIDE_FTMS // Presently, these are only used for reporting in the FTMS service (Bike Data characteristic)

// Polynomial evaluation by Horner's method - UNFINISHED
float poly(float x, const float* coeffs, const uint8_t n) {
float result = 0;
for (uint8_t i = n-1; i > 0; i--) {
result = x * (result + coeffs[i]);
// Polynomial evaluation by Horner's method
// Provides coeffs[0] + coeffs[1] * x + coeffs[2] * x^2 + ...
float poly(const float x, const float* coeffs, const uint8_t n) {
uint8_t i = n;
float result = coeffs[i];
for (i--; i >= 0; i--) {
result = coeffs[i] + x * result;
}
result += coeffs[0];
return result;
}

// Speed from power, mimicking Keiser and Peloton
void calcSpeed(){
bspeed = (power >= SPEED_FIT_POWER_THRESHOLD) ? poly(power, SC_GE26, SPEED_FIT_ORDER) : poly(power, SC_LT26, SPEED_FIT_ORDER);
float sqrtPower = sqrt(power)
bspeed = (power >= SPEED_FIT_POWER_THRESHOLD) ? poly(sqrtPower, SC_GE26, SPEED_FIT_ORDER) : poly(sqrtPower, SC_LT26, SPEED_FIT_ORDER);
}
#endif

Expand Down

0 comments on commit 01a63b9

Please sign in to comment.