From 21fef7962bbec7c69507cda9052695d18643a571 Mon Sep 17 00:00:00 2001 From: peepeetee Date: Sun, 2 Jun 2024 00:38:59 -0500 Subject: [PATCH] increase depression resolution to 16 bits(incomplete), add debugging setup --- keyboards/momokai/tap_trio_pro/analogkeys.h | 4 +- keyboards/momokai/tap_trio_pro/driver.c | 11 +++++ keyboards/momokai/tap_trio_pro/lut.c | 53 +++++++++++++++------ keyboards/momokai/tap_trio_pro/lut.h | 6 +-- 4 files changed, 54 insertions(+), 20 deletions(-) create mode 100644 keyboards/momokai/tap_trio_pro/driver.c diff --git a/keyboards/momokai/tap_trio_pro/analogkeys.h b/keyboards/momokai/tap_trio_pro/analogkeys.h index 21178b12d12..879602e1c66 100644 --- a/keyboards/momokai/tap_trio_pro/analogkeys.h +++ b/keyboards/momokai/tap_trio_pro/analogkeys.h @@ -22,8 +22,8 @@ extern analog_config g_config; typedef struct { /* For individual analog key data */ - uint8_t value; - uint8_t extremum; + uint16_t value; + uint16_t extremum; int16_t offset; bool is_analog; bool dynamic_actuation_bool; diff --git a/keyboards/momokai/tap_trio_pro/driver.c b/keyboards/momokai/tap_trio_pro/driver.c new file mode 100644 index 00000000000..04e4abdc7b1 --- /dev/null +++ b/keyboards/momokai/tap_trio_pro/driver.c @@ -0,0 +1,11 @@ + +#include +#include +#include + +#include "lut.h" + +int main() { + __builtin_trap(); + return 0; +} \ No newline at end of file diff --git a/keyboards/momokai/tap_trio_pro/lut.c b/keyboards/momokai/tap_trio_pro/lut.c index 77882c9e301..eb8f3e23430 100644 --- a/keyboards/momokai/tap_trio_pro/lut.c +++ b/keyboards/momokai/tap_trio_pro/lut.c @@ -1,31 +1,54 @@ /* Copyright 2023 RephlexZero (@RephlexZero) 2024 peepeetee (@peepeetee) SPDX-License-Identifier: GPL-2.0-or-later */ #include -#include "scanfunctions.h" -#include "util.h" +#include +// #include "scanfunctions.h" +// #include "util.h" + +#if !defined(MIN) +# define MIN(x, y) (((x) < (y)) ? (x) : (y)) +#endif + +#if !defined(MAX) +# define MAX(x, y) (((x) > (y)) ? (x) : (y)) +#endif + +// /* Equation parameters for the sensor-magnet linearity mapping */ +// const double a = 0.200347177016; +// const double b = 0.00955994866154; +// const double c = 6.01110636956; +// const double d = 1966.74076381; /* Equation parameters for the sensor-magnet linearity mapping */ -const double a = 0.200347177016; -const double b = 0.00955994866154; -const double c = 6.01110636956; -const double d = 1966.74076381; +// const double a = 1; +// const double b = 0.0061787; +// const double c = 4.34; +// const double d = 1935.43; -uint16_t distance_to_adc(uint8_t distance) { - double intermediate = a * exp(b * distance + c) + d; +const double a = 0.00609446727442; +const double b = 4.40340283615; +const double c = 2122.25923605; + +uint16_t distance_to_adc(uint16_t distance) { + // double intermediate = a * exp(b * distance + c) + d; + double intermediate = ((-exp(a*distance + b)) + c); uint16_t adc = (uint16_t) MAX(0, MIN(intermediate, 4095)); return adc; } -uint8_t adc_to_distance(uint16_t adc) { - if (adc <= d) { - return 0; - } - double intermediate = (log((adc - d) / a) - c) / b; - uint8_t distance = (uint8_t) MAX(0, MIN(intermediate, 255)); +uint16_t adc_to_distance(uint16_t adc) { + // if (adc <= d) { + // return 0; + // } + + // double intermediate = ((log((adc - d) / a)) - c) / b; + + double intermediate = ((log(c-adc)-b)/a); + uint16_t distance = (uint16_t) MAX(0, MIN(intermediate, 255)); return distance; } -uint8_t lut[ADC_RESOLUTION_MAX] = {0}; +uint16_t lut[ADC_RESOLUTION_MAX] = {0}; void generate_lut(void) { for (uint16_t i = 0; i < ADC_RESOLUTION_MAX; i++) { diff --git a/keyboards/momokai/tap_trio_pro/lut.h b/keyboards/momokai/tap_trio_pro/lut.h index 0ec9aa5454f..bfb9fc254f3 100644 --- a/keyboards/momokai/tap_trio_pro/lut.h +++ b/keyboards/momokai/tap_trio_pro/lut.h @@ -3,10 +3,10 @@ SPDX-License-Identifier: GPL-2.0-or-later */ #pragma once #include -extern uint8_t lut[4096]; +extern uint16_t lut[4096]; -uint16_t distance_to_adc(uint8_t distance); +uint16_t distance_to_adc(uint16_t distance); -uint8_t adc_to_distance(uint16_t adc); +uint16_t adc_to_distance(uint16_t adc); void generate_lut(void);