mirror of
https://github.com/whowechina/iidx_pico.git
synced 2025-02-14 09:52:35 +01:00
Turntable ppr setting
This commit is contained in:
parent
13f9e8ff2b
commit
8235ed88ac
Binary file not shown.
@ -26,6 +26,7 @@ static iidx_cfg_t default_cfg = {
|
||||
.tt_sensor = {
|
||||
.mode = 0,
|
||||
.deadzone = 0,
|
||||
.ppr = 0,
|
||||
},
|
||||
.effects = {
|
||||
.e1 = 255,
|
||||
@ -55,6 +56,10 @@ static void config_loaded()
|
||||
iidx_cfg->tt_sensor.mode = 0;
|
||||
config_changed();
|
||||
}
|
||||
if (iidx_cfg->tt_sensor.ppr > 3) {
|
||||
iidx_cfg->tt_sensor.ppr = 0;
|
||||
config_changed();
|
||||
}
|
||||
}
|
||||
|
||||
void config_changed()
|
||||
|
@ -29,6 +29,7 @@ typedef struct __attribute ((packed)) {
|
||||
struct {
|
||||
uint8_t mode; /* 0: analog, 1: analog reversed, 2: i2c, 3: i2c reversed */
|
||||
uint8_t deadzone; /* only for analog */
|
||||
uint8_t ppr; /* 0: 256, 1: 128, 2: 96, 3: 64, other: 256 */
|
||||
} tt_sensor;
|
||||
struct {
|
||||
uint8_t e1;
|
||||
|
@ -72,11 +72,12 @@ static void core1_loop()
|
||||
#define RUN_EVERY_N_MS(a, ms) { if (frame % ms == 0) a; }
|
||||
uint32_t frame = 0;
|
||||
while (true) {
|
||||
uint32_t angle = turntable_read();
|
||||
uint32_t angle = turntable_raw();
|
||||
rgb_set_angle(angle);
|
||||
|
||||
hid_report.joy[0] = angle >> 4; // 12bit to 8bit
|
||||
hid_report.joy[1] = 255 - hid_report.joy[0];
|
||||
uint8_t angle8 = turntable_read();
|
||||
hid_report.joy[0] = angle8;
|
||||
hid_report.joy[1] = 255 - angle8;
|
||||
|
||||
RUN_EVERY_N_MS(rgb_update(), 2);
|
||||
turntable_update();
|
||||
@ -102,7 +103,7 @@ static void core0_loop()
|
||||
tud_task();
|
||||
uint16_t buttons = button_read();
|
||||
boot_usb_check(buttons);
|
||||
uint16_t angle = turntable_read() >> 4;
|
||||
uint16_t angle = turntable_raw() >> 4;
|
||||
if (setup_run(buttons, angle)) {
|
||||
rgb_force_display(setup_led_button, setup_led_tt);
|
||||
} else {
|
||||
|
@ -181,6 +181,14 @@ static void tt_key_change()
|
||||
iidx_cfg->tt_sensor.deadzone = 1;
|
||||
} else if (JUST_PRESSED(KEY_6)) {
|
||||
iidx_cfg->tt_sensor.deadzone = 2;
|
||||
} else if (JUST_PRESSED(KEY_1)) {
|
||||
iidx_cfg->tt_sensor.ppr = 0;
|
||||
} else if (JUST_PRESSED(KEY_3)) {
|
||||
iidx_cfg->tt_sensor.ppr = 1;
|
||||
} else if (JUST_PRESSED(KEY_5)) {
|
||||
iidx_cfg->tt_sensor.ppr = 2;
|
||||
} else if (JUST_PRESSED(KEY_7)) {
|
||||
iidx_cfg->tt_sensor.ppr = 3;
|
||||
}
|
||||
|
||||
check_exit();
|
||||
@ -268,6 +276,10 @@ static void tt_loop()
|
||||
setup_led_button[LED_KEY_2] = iidx_cfg->tt_sensor.deadzone == 0 ? SILVER : 0;
|
||||
setup_led_button[LED_KEY_4] = iidx_cfg->tt_sensor.deadzone == 1 ? SILVER : 0;
|
||||
setup_led_button[LED_KEY_6] = iidx_cfg->tt_sensor.deadzone == 2 ? SILVER : 0;
|
||||
setup_led_button[LED_KEY_1] = iidx_cfg->tt_sensor.ppr == 0 ? SILVER : 0;
|
||||
setup_led_button[LED_KEY_3] = iidx_cfg->tt_sensor.ppr == 1 ? SILVER : 0;
|
||||
setup_led_button[LED_KEY_5] = iidx_cfg->tt_sensor.ppr == 2 ? SILVER : 0;
|
||||
setup_led_button[LED_KEY_7] = iidx_cfg->tt_sensor.ppr == 3 ? SILVER : 0;
|
||||
}
|
||||
|
||||
static struct {
|
||||
|
@ -19,7 +19,6 @@
|
||||
#include "config.h"
|
||||
|
||||
static uint16_t angle = 0;
|
||||
|
||||
static uint8_t current_mode = 0;
|
||||
|
||||
static void init_i2c()
|
||||
@ -178,8 +177,51 @@ void turntable_update()
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t turntable_read()
|
||||
uint16_t turntable_raw()
|
||||
{
|
||||
bool reversed = iidx_cfg->tt_sensor.mode & 0x01;
|
||||
return reversed ? 4095 - angle : angle; // 12bit
|
||||
}
|
||||
|
||||
uint8_t turntable_read()
|
||||
{
|
||||
static uint8_t counter = 0;
|
||||
static int16_t old_angle = 0;
|
||||
|
||||
uint16_t step;
|
||||
if (iidx_cfg->tt_sensor.ppr == 1) {
|
||||
step = 4096 / 128;
|
||||
} else if (iidx_cfg->tt_sensor.ppr == 2) {
|
||||
step = 4096 / 96;
|
||||
} else if (iidx_cfg->tt_sensor.ppr == 3) {
|
||||
step = 4096 / 64;
|
||||
} else {
|
||||
return angle >> 4;
|
||||
}
|
||||
|
||||
int16_t delta = angle - old_angle;
|
||||
if (delta == 0) {
|
||||
return counter;
|
||||
} else if (delta > 2048) {
|
||||
delta -= 4096;
|
||||
} else if (delta < -2048) {
|
||||
delta += 4096;
|
||||
}
|
||||
|
||||
if (abs(delta) >= step) {
|
||||
if (delta > 0) {
|
||||
counter++;
|
||||
old_angle += step;
|
||||
} else {
|
||||
counter--;
|
||||
old_angle -= step;
|
||||
}
|
||||
if (old_angle > 4096) {
|
||||
old_angle -= 4096;
|
||||
} else if (old_angle < 0) {
|
||||
old_angle += 4096;
|
||||
}
|
||||
}
|
||||
|
||||
return counter;
|
||||
}
|
@ -10,7 +10,8 @@
|
||||
#include <stdbool.h>
|
||||
|
||||
void turntable_init();
|
||||
uint16_t turntable_read();
|
||||
uint8_t turntable_read();
|
||||
uint16_t turntable_raw();
|
||||
void turntable_update();
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user