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_VAL1 0x2
|
||||||
#define BTN_VAL2 0x4
|
#define BTN_VAL2 0x4
|
||||||
#define BTN_PRESET 0x8
|
#define BTN_PRESET 0x8
|
||||||
#define KNOB_CURVE_THRESHOLD 100
|
#define KNOB_CURVE_THRESHOLD 180
|
||||||
#define KNOB_CURVE_MULTIPLIER 5
|
#define KNOB_CURVE_MAX_MULTIPLIER 5
|
||||||
#define KNOB_DISPLAY_TIME 500
|
#define KNOB_DISPLAY_TIME 500
|
||||||
|
|
||||||
// Send breath CC data no more than every CC_BREATH_INTERVAL
|
// Send breath CC data no more than every CC_BREATH_INTERVAL
|
||||||
|
|
|
@ -11,12 +11,8 @@ FilterOnePole breathAltFilter;
|
||||||
FilterOnePole spikeFilter;
|
FilterOnePole spikeFilter;
|
||||||
FilterOnePole tiltFilter;
|
FilterOnePole tiltFilter;
|
||||||
FilterOnePole rollFilter;
|
FilterOnePole rollFilter;
|
||||||
FilterOnePole sliderFilterExtra;
|
FilterOnePole leverFilter;
|
||||||
FilterOnePole sliderFilterPB;
|
FilterOnePole biteFilter;
|
||||||
FilterOnePole sliderFilterLever;
|
|
||||||
float sliderMAExtra = 0.0;
|
|
||||||
float sliderMAPB = 0.0;
|
|
||||||
float sliderMALever = 0.0;
|
|
||||||
|
|
||||||
Adafruit_MPR121 touchSensorKeys = Adafruit_MPR121();
|
Adafruit_MPR121 touchSensorKeys = Adafruit_MPR121();
|
||||||
Adafruit_MPR121 touchSensorRoller = 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
|
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
|
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
|
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);
|
icmSensor.begin_I2C(ICM20948_I2CADDR_DEFAULT, &MainI2CBus);
|
||||||
|
|
||||||
ledStrip.begin();
|
ledStrip.begin();
|
||||||
|
@ -89,6 +87,8 @@ void updateFilters(preset_t &preset) {
|
||||||
breathFilter.setFrequency(preset.breathFilterFreq);
|
breathFilter.setFrequency(preset.breathFilterFreq);
|
||||||
breathAltFilter.setFrequency(preset.breathFilterFreq);
|
breathAltFilter.setFrequency(preset.breathFilterFreq);
|
||||||
spikeFilter.setFrequency(preset.spikeFilterFreq);
|
spikeFilter.setFrequency(preset.spikeFilterFreq);
|
||||||
|
leverFilter.setFrequency(preset.CCFilterFreq);
|
||||||
|
biteFilter.setFrequency(preset.CCFilterFreq);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -145,7 +145,7 @@ int readKnob(uint8_t n) {
|
||||||
lastOut = out;
|
lastOut = out;
|
||||||
|
|
||||||
if (time - lastOutTime < KNOB_CURVE_THRESHOLD) {
|
if (time - lastOutTime < KNOB_CURVE_THRESHOLD) {
|
||||||
out *= KNOB_CURVE_MULTIPLIER;
|
out *= constrain(KNOB_CURVE_THRESHOLD / time - lastOutTime, 1, KNOB_CURVE_MAX_MULTIPLIER);
|
||||||
}
|
}
|
||||||
lastOutTime = time;
|
lastOutTime = time;
|
||||||
}
|
}
|
||||||
|
@ -213,10 +213,10 @@ int readRawControl(Control id) {
|
||||||
a = readTouchRoller(extraPin);
|
a = readTouchRoller(extraPin);
|
||||||
break;
|
break;
|
||||||
case CONTROL_BITE:
|
case CONTROL_BITE:
|
||||||
a = analogRead(bitePin);
|
a = biteFilter.input(analogRead(bitePin));
|
||||||
break;
|
break;
|
||||||
case CONTROL_LEVER:
|
case CONTROL_LEVER:
|
||||||
a = analogRead(leverPin);
|
a = leverFilter.input(analogRead(leverPin));
|
||||||
break;
|
break;
|
||||||
case CONTROL_STICK_X:
|
case CONTROL_STICK_X:
|
||||||
a = analogRead(stickXPin);
|
a = analogRead(stickXPin);
|
||||||
|
|
|
@ -388,6 +388,9 @@ static void curveCustomDraw(size_t breathCurve) {
|
||||||
const char* curveMenuLabels[] = { "-4", "-3", "-2", "-1", "LIN", "+1", "+2",
|
const char* curveMenuLabels[] = { "-4", "-3", "-2", "-1", "LIN", "+1", "+2",
|
||||||
"+3", "+4", "S1", "S2", "Z1", "Z2" };
|
"+3", "+4", "S1", "S2", "Z1", "Z2" };
|
||||||
if (breathCurve >= curves.size()) {
|
if (breathCurve >= curves.size()) {
|
||||||
|
display.setCursor(125 - 3 * 6, 60 - 8);
|
||||||
|
display.setTextSize(0);
|
||||||
|
display.print("INVALID");
|
||||||
return;
|
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" });
|
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<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<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, {
|
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",
|
"-12", "-11", "-10", "-9", "-8", "-7", "-6", "-5", "-4", "-3", "-2", "-1",
|
||||||
"PB/2",
|
"PB/2",
|
||||||
|
@ -1095,7 +1099,7 @@ std::array<MenuScreen *const, 11> breathMenuEntries = {
|
||||||
};
|
};
|
||||||
SubMenu<11> breathMenu("BR SETUP", breathMenuEntries);
|
SubMenu<11> breathMenu("BR SETUP", breathMenuEntries);
|
||||||
|
|
||||||
const std::array<MenuScreen *const, 26> controlMenuEntries = {
|
const std::array<MenuScreen *const, 27> controlMenuEntries = {
|
||||||
&fingeringMenu,
|
&fingeringMenu,
|
||||||
&polyMenu,
|
&polyMenu,
|
||||||
&rollerMenu,
|
&rollerMenu,
|
||||||
|
@ -1114,6 +1118,7 @@ const std::array<MenuScreen *const, 26> controlMenuEntries = {
|
||||||
&portMenu,
|
&portMenu,
|
||||||
&portLimitMenu,
|
&portLimitMenu,
|
||||||
°litchMenu,
|
°litchMenu,
|
||||||
|
&ccfilterMenu,
|
||||||
&pinkyMenu,
|
&pinkyMenu,
|
||||||
&pitchBendMenu,
|
&pitchBendMenu,
|
||||||
&tiltModeMenu,
|
&tiltModeMenu,
|
||||||
|
@ -1123,7 +1128,7 @@ const std::array<MenuScreen *const, 26> controlMenuEntries = {
|
||||||
&accelModeMenu,
|
&accelModeMenu,
|
||||||
&accelCCMenu,
|
&accelCCMenu,
|
||||||
};
|
};
|
||||||
SubMenu<26> controlMenu("CTL SETUP", controlMenuEntries);
|
SubMenu<27> controlMenu("CTL SETUP", controlMenuEntries);
|
||||||
|
|
||||||
const std::array<MenuScreen *const, 5> vibratoMenuEntries = {
|
const std::array<MenuScreen *const, 5> vibratoMenuEntries = {
|
||||||
&vibDepthMenu,
|
&vibDepthMenu,
|
||||||
|
|
|
@ -350,6 +350,9 @@ void readEEPROM(const bool factoryReset, calibration_t &calibration) {
|
||||||
if (settings_version < 6) {
|
if (settings_version < 6) {
|
||||||
presets[i].noteMode = BREATH_TRIGGER;
|
presets[i].noteMode = BREATH_TRIGGER;
|
||||||
}
|
}
|
||||||
|
if (settings_version < 7) {
|
||||||
|
presets[i].CCFilterFreq = FILTER_FREQ;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
writePresets();
|
writePresets();
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
|
|
||||||
|
|
||||||
#define EEPROM_VERSION 6
|
#define EEPROM_VERSION 7
|
||||||
#define EEPROM_VERSION_ADDR 0
|
#define EEPROM_VERSION_ADDR 0
|
||||||
#define SETTINGS_OFFSET 2
|
#define SETTINGS_OFFSET 2
|
||||||
#define PRESET_MAX_SIZE 128 // Leave extra space for future settings
|
#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 stickXCC = 14; // stickX CC selection
|
||||||
uint8_t stickYCC = 15; // stickY CC selection
|
uint8_t stickYCC = 15; // stickY CC selection
|
||||||
NoteMode noteMode = NoteMode::BREATH_TRIGGER;
|
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");
|
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