mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-07-27 11:31:13 +00:00
increase depression resolution to 16 bits(incomplete), add debugging setup
This commit is contained in:
parent
9b985746fc
commit
21fef7962b
@ -22,8 +22,8 @@ extern analog_config g_config;
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
/* For individual analog key data */
|
/* For individual analog key data */
|
||||||
uint8_t value;
|
uint16_t value;
|
||||||
uint8_t extremum;
|
uint16_t extremum;
|
||||||
int16_t offset;
|
int16_t offset;
|
||||||
bool is_analog;
|
bool is_analog;
|
||||||
bool dynamic_actuation_bool;
|
bool dynamic_actuation_bool;
|
||||||
|
11
keyboards/momokai/tap_trio_pro/driver.c
Normal file
11
keyboards/momokai/tap_trio_pro/driver.c
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
|
#include "lut.h"
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
__builtin_trap();
|
||||||
|
return 0;
|
||||||
|
}
|
@ -1,31 +1,54 @@
|
|||||||
/* Copyright 2023 RephlexZero (@RephlexZero) 2024 peepeetee (@peepeetee)
|
/* Copyright 2023 RephlexZero (@RephlexZero) 2024 peepeetee (@peepeetee)
|
||||||
SPDX-License-Identifier: GPL-2.0-or-later */
|
SPDX-License-Identifier: GPL-2.0-or-later */
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include "scanfunctions.h"
|
#include <stdint.h>
|
||||||
#include "util.h"
|
// #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 */
|
/* Equation parameters for the sensor-magnet linearity mapping */
|
||||||
const double a = 0.200347177016;
|
// const double a = 1;
|
||||||
const double b = 0.00955994866154;
|
// const double b = 0.0061787;
|
||||||
const double c = 6.01110636956;
|
// const double c = 4.34;
|
||||||
const double d = 1966.74076381;
|
// const double d = 1935.43;
|
||||||
|
|
||||||
uint16_t distance_to_adc(uint8_t distance) {
|
const double a = 0.00609446727442;
|
||||||
double intermediate = a * exp(b * distance + c) + d;
|
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));
|
uint16_t adc = (uint16_t) MAX(0, MIN(intermediate, 4095));
|
||||||
return adc;
|
return adc;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t adc_to_distance(uint16_t adc) {
|
uint16_t adc_to_distance(uint16_t adc) {
|
||||||
if (adc <= d) {
|
// if (adc <= d) {
|
||||||
return 0;
|
// return 0;
|
||||||
}
|
// }
|
||||||
double intermediate = (log((adc - d) / a) - c) / b;
|
|
||||||
uint8_t distance = (uint8_t) MAX(0, MIN(intermediate, 255));
|
// 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;
|
return distance;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t lut[ADC_RESOLUTION_MAX] = {0};
|
uint16_t lut[ADC_RESOLUTION_MAX] = {0};
|
||||||
|
|
||||||
void generate_lut(void) {
|
void generate_lut(void) {
|
||||||
for (uint16_t i = 0; i < ADC_RESOLUTION_MAX; i++) {
|
for (uint16_t i = 0; i < ADC_RESOLUTION_MAX; i++) {
|
||||||
|
@ -3,10 +3,10 @@ SPDX-License-Identifier: GPL-2.0-or-later */
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
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);
|
void generate_lut(void);
|
||||||
|
Loading…
Reference in New Issue
Block a user