mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-07-23 16:12:07 +00:00
fix lut, formatting changes
This commit is contained in:
parent
2247f948f6
commit
148dee0ea4
@ -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};
|
||||||
|
@ -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];
|
||||||
|
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user