fix lut, formatting changes

This commit is contained in:
peepeetee 2025-01-22 21:30:32 -06:00
parent 2247f948f6
commit 148dee0ea4
3 changed files with 17 additions and 28 deletions

View File

@ -1,4 +1,4 @@
/* Copyright 2023 RephlexZero (@RephlexZero) 2024 peepeetee (@peepeetee) 2024 Jenna Fligor (@Ex-32) /* Copyright 202 RephlexZero (@RephlexZero) 2024 peepeetee (@peepeetee) 2024 Jenna Fligor (@Ex-32)
SPDX-License-Identifier: GPL-2.0-or-later */ SPDX-License-Identifier: GPL-2.0-or-later */
#include <math.h> #include <math.h>
#include <stdint.h> #include <stdint.h>
@ -20,32 +20,23 @@ SPDX-License-Identifier: GPL-2.0-or-later */
// const double lut_d = 1966.74076381; // const double lut_d = 1966.74076381;
/* Equation parameters for the sensor-magnet linearity mapping */ /* Equation parameters for the sensor-magnet linearity mapping */
// const double lut_a = 1; const double lut_a = -366.805673399;
// const double lut_b = 0.0061787; const double lut_b = 0.00617870508512;
// const double lut_c = 4.34; const double lut_c = -1.49468890703;
// const double lut_d = 1935.43; const double lut_d = 2094.38794157;
const double lut_a = 0.00609446727442;
const double lut_b = 4.40340283615;
const double lut_c = 2000;
uint16_t distance_to_adc(uint16_t distance) { uint16_t distance_to_adc(uint16_t distance) {
// double intermediate = lut_a * exp(lut_b * distance + lut_c) + lut_d; double intermediate = lut_a * exp(lut_b * distance + lut_c) + lut_d;
double intermediate = ((-exp(lut_a*distance + lut_b)) + lut_c); return (uint16_t) fmax(0, fmin(intermediate, 4095));
uint16_t adc = (uint16_t) MAX(0, MIN(intermediate, ADC_RESOLUTION_MAX -1));
return adc;
} }
uint16_t adc_to_distance(uint16_t adc) { uint16_t adc_to_distance(uint16_t adc) {
// if (adc <= lut_c) { double check = (adc - lut_d) / lut_a;
// return 0; if (check <= 0) {
// } return 0;
}
// double intermediate = ((log((adc - lut_d) / lut_a)) - lut_c) / lut_b; double intermediate = (log(check) - lut_c) / lut_b;
return (uint16_t) fmax(0, fmin(intermediate, 255));
double intermediate = ((log(lut_c-adc)-lut_b)/lut_a);
uint16_t distance = (uint16_t) MAX(0, MIN(intermediate, 400));
return distance;
} }
uint16_t lut[ADC_RESOLUTION_MAX] = {0}; uint16_t lut[ADC_RESOLUTION_MAX] = {0};

View File

@ -214,9 +214,7 @@ bool matrix_scan_custom(matrix_row_t current_matrix[]) {
if (keys[current_row][0].is_analog == false) { if (keys[current_row][0].is_analog == false) {
matrix_read_cols_on_row(current_matrix, current_row); matrix_read_cols_on_row(current_matrix, current_row);
} } else {
else {
for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) { for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
hybrid_key_t *key = &keys[current_row][current_col]; hybrid_key_t *key = &keys[current_row][current_col];

View File

@ -13,8 +13,8 @@ void get_sensor_offsets(void) {
for (uint8_t i = 0; i < MATRIX_ROWS; i++) { for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
for (uint8_t j = 0; j < MATRIX_COLS; j++) { for (uint8_t j = 0; j < MATRIX_COLS; j++) {
if (keys[i][j].is_analog) { if (keys[i][j].is_analog) {
keys[i][j].offset = rest_adc_value - analogReadPin(matrix_pins[i][j]); keys[i][j].offset = rest_adc_value - analogReadPin(matrix_pins[i][j]);
printf("Offset: %d\n", keys[i][j].offset); printf("Offset: %d\n", keys[i][j].offset);
} }
} }
} }