Added filter for select CC controls
This commit is contained in:
parent
e3c91fa6ee
commit
7219872a14
5 changed files with 24 additions and 15 deletions
|
@ -33,8 +33,8 @@
|
|||
#define BTN_VAL1 0x2
|
||||
#define BTN_VAL2 0x4
|
||||
#define BTN_PRESET 0x8
|
||||
#define KNOB_CURVE_THRESHOLD 100
|
||||
#define KNOB_CURVE_MULTIPLIER 5
|
||||
#define KNOB_CURVE_THRESHOLD 180
|
||||
#define KNOB_CURVE_MAX_MULTIPLIER 5
|
||||
#define KNOB_DISPLAY_TIME 500
|
||||
|
||||
// Send breath CC data no more than every CC_BREATH_INTERVAL
|
||||
|
|
|
@ -11,12 +11,8 @@ FilterOnePole breathAltFilter;
|
|||
FilterOnePole spikeFilter;
|
||||
FilterOnePole tiltFilter;
|
||||
FilterOnePole rollFilter;
|
||||
FilterOnePole sliderFilterExtra;
|
||||
FilterOnePole sliderFilterPB;
|
||||
FilterOnePole sliderFilterLever;
|
||||
float sliderMAExtra = 0.0;
|
||||
float sliderMAPB = 0.0;
|
||||
float sliderMALever = 0.0;
|
||||
FilterOnePole leverFilter;
|
||||
FilterOnePole biteFilter;
|
||||
|
||||
Adafruit_MPR121 touchSensorKeys = Adafruit_MPR121();
|
||||
Adafruit_MPR121 touchSensorRoller = Adafruit_MPR121();
|
||||
|
@ -54,6 +50,8 @@ void initHardware() {
|
|||
spikeFilter.setFilter(HIGHPASS, SPIKE_FILTER_FREQ, 0.0); // create a one pole (RC) lowpass filter
|
||||
tiltFilter.setFilter(LOWPASS, ICM_FILTER_FREQ, 0.0); // create a one pole (RC) lowpass filter
|
||||
rollFilter.setFilter(LOWPASS, ICM_FILTER_FREQ, 0.0); // create a one pole (RC) lowpass filter
|
||||
leverFilter.setFilter(LOWPASS, FILTER_FREQ, 0.0); // create a one pole (RC) lowpass filter
|
||||
biteFilter.setFilter(LOWPASS, FILTER_FREQ, 0.0); // create a one pole (RC) lowpass filter
|
||||
icmSensor.begin_I2C(ICM20948_I2CADDR_DEFAULT, &MainI2CBus);
|
||||
|
||||
ledStrip.begin();
|
||||
|
@ -89,6 +87,8 @@ void updateFilters(preset_t &preset) {
|
|||
breathFilter.setFrequency(preset.breathFilterFreq);
|
||||
breathAltFilter.setFrequency(preset.breathFilterFreq);
|
||||
spikeFilter.setFrequency(preset.spikeFilterFreq);
|
||||
leverFilter.setFrequency(preset.CCFilterFreq);
|
||||
biteFilter.setFrequency(preset.CCFilterFreq);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -145,7 +145,7 @@ int readKnob(uint8_t n) {
|
|||
lastOut = out;
|
||||
|
||||
if (time - lastOutTime < KNOB_CURVE_THRESHOLD) {
|
||||
out *= KNOB_CURVE_MULTIPLIER;
|
||||
out *= constrain(KNOB_CURVE_THRESHOLD / time - lastOutTime, 1, KNOB_CURVE_MAX_MULTIPLIER);
|
||||
}
|
||||
lastOutTime = time;
|
||||
}
|
||||
|
@ -213,10 +213,10 @@ int readRawControl(Control id) {
|
|||
a = readTouchRoller(extraPin);
|
||||
break;
|
||||
case CONTROL_BITE:
|
||||
a = analogRead(bitePin);
|
||||
a = biteFilter.input(analogRead(bitePin));
|
||||
break;
|
||||
case CONTROL_LEVER:
|
||||
a = analogRead(leverPin);
|
||||
a = leverFilter.input(analogRead(leverPin));
|
||||
break;
|
||||
case CONTROL_STICK_X:
|
||||
a = analogRead(stickXPin);
|
||||
|
|
|
@ -388,6 +388,9 @@ static void curveCustomDraw(size_t breathCurve) {
|
|||
const char* curveMenuLabels[] = { "-4", "-3", "-2", "-1", "LIN", "+1", "+2",
|
||||
"+3", "+4", "S1", "S2", "Z1", "Z2" };
|
||||
if (breathCurve >= curves.size()) {
|
||||
display.setCursor(125 - 3 * 6, 60 - 8);
|
||||
display.setTextSize(0);
|
||||
display.print("INVALID");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1025,6 +1028,7 @@ PresetValueMenu<128, uint8_t> rollCCMenu("ROLL CC", &preset_t::icmRollCC, 0, 127
|
|||
ChoiceMenu<4, ExtraControl> accelModeMenu("ACCEL MODE", &preset_t::icmAccelMode, { {OFF, VIBRATO, GLIDE, CC} }, { "OFF", "VIBRATO", "GLIDE", "CC" });
|
||||
PresetValueMenu<128, uint8_t> accelCCMenu("ACCEL CC", &preset_t::icmAccelCC, 0, 127, true, CC_NAMES);
|
||||
PresetValueMenu<1, uint8_t> deglitchMenu("DEGLITCH", &preset_t::deglitch, 0, 70, true, { "OFF" }, "ms");
|
||||
PresetValueMenu<0, uint8_t> ccfilterMenu("AUXFILT CT", &preset_t::CCFilterFreq, 1, 200, false, {}, "hz");
|
||||
PresetValueMenu<29, uint8_t> pinkyMenu("PINKY KEY", &preset_t::pinkySetting, 0, 29, true, {
|
||||
"-12", "-11", "-10", "-9", "-8", "-7", "-6", "-5", "-4", "-3", "-2", "-1",
|
||||
"PB/2",
|
||||
|
@ -1095,7 +1099,7 @@ std::array<MenuScreen *const, 11> breathMenuEntries = {
|
|||
};
|
||||
SubMenu<11> breathMenu("BR SETUP", breathMenuEntries);
|
||||
|
||||
const std::array<MenuScreen *const, 26> controlMenuEntries = {
|
||||
const std::array<MenuScreen *const, 27> controlMenuEntries = {
|
||||
&fingeringMenu,
|
||||
&polyMenu,
|
||||
&rollerMenu,
|
||||
|
@ -1114,6 +1118,7 @@ const std::array<MenuScreen *const, 26> controlMenuEntries = {
|
|||
&portMenu,
|
||||
&portLimitMenu,
|
||||
°litchMenu,
|
||||
&ccfilterMenu,
|
||||
&pinkyMenu,
|
||||
&pitchBendMenu,
|
||||
&tiltModeMenu,
|
||||
|
@ -1123,7 +1128,7 @@ const std::array<MenuScreen *const, 26> controlMenuEntries = {
|
|||
&accelModeMenu,
|
||||
&accelCCMenu,
|
||||
};
|
||||
SubMenu<26> controlMenu("CTL SETUP", controlMenuEntries);
|
||||
SubMenu<27> controlMenu("CTL SETUP", controlMenuEntries);
|
||||
|
||||
const std::array<MenuScreen *const, 5> vibratoMenuEntries = {
|
||||
&vibDepthMenu,
|
||||
|
|
|
@ -350,6 +350,9 @@ void readEEPROM(const bool factoryReset, calibration_t &calibration) {
|
|||
if (settings_version < 6) {
|
||||
presets[i].noteMode = BREATH_TRIGGER;
|
||||
}
|
||||
if (settings_version < 7) {
|
||||
presets[i].CCFilterFreq = FILTER_FREQ;
|
||||
}
|
||||
}
|
||||
|
||||
writePresets();
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
#include "globals.h"
|
||||
|
||||
|
||||
#define EEPROM_VERSION 6
|
||||
#define EEPROM_VERSION 7
|
||||
#define EEPROM_VERSION_ADDR 0
|
||||
#define SETTINGS_OFFSET 2
|
||||
#define PRESET_MAX_SIZE 128 // Leave extra space for future settings
|
||||
|
@ -107,8 +107,9 @@ struct preset_t {
|
|||
uint8_t stickXCC = 14; // stickX CC selection
|
||||
uint8_t stickYCC = 15; // stickY CC selection
|
||||
NoteMode noteMode = NoteMode::BREATH_TRIGGER;
|
||||
uint8_t CCFilterFreq = 20;
|
||||
|
||||
uint8_t _reserved[76];
|
||||
uint8_t _reserved[75];
|
||||
};
|
||||
|
||||
static_assert(sizeof(preset_t) == PRESET_MAX_SIZE, "preset_t must be 128 bytes");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue