diff --git a/NuEVI/NuEVI.ino b/NuEVI/NuEVI.ino index bc18f47..fa566c1 100644 --- a/NuEVI/NuEVI.ino +++ b/NuEVI/NuEVI.ino @@ -598,6 +598,20 @@ void loop() { writeSetting(LEVEL_VAL_ADDR,levelVal); } lastPinkyKey = pinkyKey; + } else if (pinkySetting == GLD){ + if (pinkyKey){ + ledMeter(levelVal); + if (K5 && (levelVal < 127)){ + levelVal++; + midiSendControlChange(CCN_Port, levelVal); + } else if (K1 && (levelVal > 0)){ + levelVal--; + midiSendControlChange(CCN_Port, levelVal); + } + } else if (lastPinkyKey){ + writeSetting(LEVEL_VAL_ADDR,levelVal); + } + lastPinkyKey = pinkyKey; } } else if (mainState == RISE_WAIT) { if ((pressureSensor > breathThrVal) || gateOpen) { @@ -783,7 +797,7 @@ void loop() { } if (currentTime - ccSendTime3 > CC_INTERVAL3) { if (gateOpenEnable || gateOpen) doorKnobCheck(); - if (((pinkySetting == LVL) || (pinkySetting == LVLP)) && pinkyKey){ + if (((pinkySetting == LVL) || (pinkySetting == LVLP) || (pinkySetting == GLD)) && pinkyKey){ // show LVL indication } else updateSensorLEDs(); ccSendTime3 = currentTime; @@ -1174,10 +1188,19 @@ void portamento_() { if (biteJumper) { //PBITE (if pulled low with jumper, use pressure sensor instead of capacitive bite sensor) biteSensor=analogRead(bitePressurePin); // alternative kind bite sensor (air pressure tube and sensor) PBITE - } else { + } else { biteSensor = touchRead(bitePin); // get sensor data, do some smoothing - SENSOR PIN 17 - PCB PINS LABELED "BITE" (GND left, sensor pin right) - } - if (0 == vibControl) { + } + if (pinkySetting == GLD){ + if (pinkyKey){ + if (!portIsOn) { + portOn(); + } + port(); + } else if (portIsOn) { // pinky key released + portOff(); + } + } else if (0 == vibControl) { // Portamento is controlled with the bite sensor (variable capacitor) in the mouthpiece if (portamento && (biteSensor >= portamThrVal)) { // if we are enabled and over the threshold, send portamento if (!portIsOn) { @@ -1218,7 +1241,9 @@ void portOn() { void port() { int portCC; - if (1 != vibControl) + if (pinkySetting == GLD){ + portCC = levelVal; + } else if (1 != vibControl) portCC = map(constrain(biteSensor, portamThrVal, portamMaxVal), portamThrVal, portamMaxVal, 0, 127); else portCC = constrain((leverPortZero-leverPortThr-leverPortRead),0,127); diff --git a/NuEVI/globals.h b/NuEVI/globals.h index 5348f30..28ba100 100644 --- a/NuEVI/globals.h +++ b/NuEVI/globals.h @@ -24,6 +24,7 @@ #define ECSW 26 #define LVL 27 #define LVLP 28 +#define GLD 29 //Vibrato direction #define UPWD 1 diff --git a/NuEVI/menu.cpp b/NuEVI/menu.cpp index 6bd7e67..caaec70 100644 --- a/NuEVI/menu.cpp +++ b/NuEVI/menu.cpp @@ -866,7 +866,7 @@ const MenuEntrySub deglitchMenu = { }; const MenuEntrySub pinkyMenu = { - MenuType::ESub, "PINKY KEY", "PINKY KEY", &pinkySetting, 0, 28, MenuEntryFlags::ENone, + MenuType::ESub, "PINKY KEY", "PINKY KEY", &pinkySetting, 0, 29, MenuEntryFlags::ENone, [](SubMenuRef __unused,char* textBuffer, const char** __unused unit) { if (pinkySetting == PBD) strncpy(textBuffer, "PBD", 4); @@ -878,6 +878,8 @@ const MenuEntrySub pinkyMenu = { strncpy(textBuffer, "LVL", 4); else if (pinkySetting == LVLP) strncpy(textBuffer, "LVP", 4); + else if (pinkySetting == GLD) + strncpy(textBuffer, "GLD", 4); else numToString(pinkySetting-12, textBuffer, true); }, diff --git a/NuEVI/settings.cpp b/NuEVI/settings.cpp index 5b4ab64..5c42a1a 100644 --- a/NuEVI/settings.cpp +++ b/NuEVI/settings.cpp @@ -133,7 +133,7 @@ void readEEPROM(const bool factoryReset) { curve = readSettingBounded(BREATHCURVE_ADDR, 0, 12, BREATHCURVE_FACTORY); velSmpDl = readSettingBounded(VEL_SMP_DL_ADDR, 0, 30, VEL_SMP_DL_FACTORY); velBias = readSettingBounded(VEL_BIAS_ADDR, 0, 9, VEL_BIAS_FACTORY); - pinkySetting = readSettingBounded(PINKY_KEY_ADDR, 0, 28, PINKY_KEY_FACTORY); + pinkySetting = readSettingBounded(PINKY_KEY_ADDR, 0, 29, PINKY_KEY_FACTORY); fastPatch[0] = readSettingBounded(FP1_ADDR, 0, 127, 0); fastPatch[1] = readSettingBounded(FP2_ADDR, 0, 127, 0); fastPatch[2] = readSettingBounded(FP3_ADDR, 0, 127, 0);