Added new dual trill functionality (contribution from Nyle) for third trill key allowing it to do both 3 semitones up and 4 semitones up. The alternate value is triggered by touching K3 and K7 (third trill key) at the same time. Third trill setting decides which interval is the standard "non-combo" one. Inspired by this combo thing, I also added an alternate way of doing lecacy style direct patch selection. Latch a note value using pinky key, then touch K1/K5 combo to send program change to that note value, or K2/K6 combo to send high and low numbers (108 to 127 and 0 to 36).
This commit is contained in:
parent
e7a944b9d1
commit
053b954936
2 changed files with 37 additions and 11 deletions
|
|
@ -245,6 +245,11 @@ byte lastPinkyKey = 0;
|
||||||
byte pitchlatch;
|
byte pitchlatch;
|
||||||
int reverb;
|
int reverb;
|
||||||
|
|
||||||
|
byte pcCombo1 = 0;
|
||||||
|
byte pcCombo2 = 0;
|
||||||
|
byte lastpcc1 = 0;
|
||||||
|
byte lastpcc2 = 0;
|
||||||
|
|
||||||
byte slurSustain = 0;
|
byte slurSustain = 0;
|
||||||
byte parallelChord = 0;
|
byte parallelChord = 0;
|
||||||
byte subOctaveDouble = 0;
|
byte subOctaveDouble = 0;
|
||||||
|
|
@ -406,8 +411,28 @@ void loop() {
|
||||||
if (legacy || legacyBrAct) {
|
if (legacy || legacyBrAct) {
|
||||||
|
|
||||||
bool bothPB = (pbUp > ((pitchbMaxVal + pitchbThrVal) / 2)) && (pbDn > ((pitchbMaxVal + pitchbThrVal) / 2));
|
bool bothPB = (pbUp > ((pitchbMaxVal + pitchbThrVal) / 2)) && (pbDn > ((pitchbMaxVal + pitchbThrVal) / 2));
|
||||||
bool brSuck = analogRead(breathSensorPin) < (breathCalZero - (bcasMode?900:800));
|
bool brSuck = analogRead(breathSensorPin) < (breathCalZero - 850);
|
||||||
|
|
||||||
|
if (pcCombo1 && (pcCombo1 != lastpcc1)){ // latched note number to patch number, send with K1/K5 combo
|
||||||
|
if (patch != pitchlatch) {
|
||||||
|
patch = pitchlatch;
|
||||||
|
doPatchUpdate = 1;
|
||||||
|
}
|
||||||
|
} else if (pcCombo2 && (pcCombo2 != lastpcc2)) { // hi and lo patch numbers, send with K2/K6 combo
|
||||||
|
if (pitchlatch > 75) {
|
||||||
|
if (patch != patchLimit(pitchlatch + 24)) {
|
||||||
|
patch = patchLimit(pitchlatch + 24); // add 24 to get high numbers 108 to 127
|
||||||
|
doPatchUpdate = 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (patch != patchLimit(pitchlatch - 36)) {
|
||||||
|
patch = patchLimit(pitchlatch - 36); // subtract 36 to get low numbers 0 to 36
|
||||||
|
doPatchUpdate = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
lastpcc1=pcCombo1;
|
||||||
|
lastpcc2=pcCombo2;
|
||||||
if (
|
if (
|
||||||
(bothPB && legacy) ||
|
(bothPB && legacy) ||
|
||||||
(brSuck && legacyBrAct && (bothPB || bcasMode))
|
(brSuck && legacyBrAct && (bothPB || bcasMode))
|
||||||
|
|
@ -440,7 +465,7 @@ void loop() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (pbDn > (pitchbMaxVal + pitchbThrVal) / 2 && (analogRead(breathSensorPin) < (breathCalZero - 800)) && programonce == false) { // down bend for suck programming button
|
if (pbDn > (pitchbMaxVal + pitchbThrVal) / 2 && (analogRead(breathSensorPin) < (breathCalZero - 850)) && programonce == false) { // down bend for suck programming button
|
||||||
programonce = true;
|
programonce = true;
|
||||||
|
|
||||||
if (octaveR == 0) { //lowest octave position
|
if (octaveR == 0) { //lowest octave position
|
||||||
|
|
@ -508,7 +533,7 @@ void loop() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (analogRead(breathSensorPin) > (breathCalZero - 800)) programonce = false;
|
if (analogRead(breathSensorPin) > (breathCalZero - 850)) programonce = false;
|
||||||
specialKey = (touchRead(specialKeyPin) > touch_Thr); //S2 on pcb
|
specialKey = (touchRead(specialKeyPin) > touch_Thr); //S2 on pcb
|
||||||
if (specialKeyEnable) {
|
if (specialKeyEnable) {
|
||||||
if (lastSpecialKey != specialKey) {
|
if (lastSpecialKey != specialKey) {
|
||||||
|
|
@ -754,7 +779,6 @@ void loop() {
|
||||||
}
|
}
|
||||||
if (currentTime - ccSendTime2 > CC_INTERVAL2) {
|
if (currentTime - ccSendTime2 > CC_INTERVAL2) {
|
||||||
portamento_();
|
portamento_();
|
||||||
readTeensySwitches();
|
|
||||||
ccSendTime2 = currentTime;
|
ccSendTime2 = currentTime;
|
||||||
}
|
}
|
||||||
if (currentTime - ccSendTime3 > CC_INTERVAL3) {
|
if (currentTime - ccSendTime3 > CC_INTERVAL3) {
|
||||||
|
|
@ -1219,11 +1243,6 @@ void portOff() {
|
||||||
|
|
||||||
//***********************************************************
|
//***********************************************************
|
||||||
|
|
||||||
|
|
||||||
void readTeensySwitches() { //these seem to slow things down, so do it less often
|
|
||||||
pinkyKey = (touchRead(halfPitchBendKeyPin) > touch_Thr); // SENSOR PIN 1 - PCB PIN "S1"
|
|
||||||
}
|
|
||||||
|
|
||||||
void readSwitches() {
|
void readSwitches() {
|
||||||
|
|
||||||
// Read touch pads (MPR121), compare against threshold value
|
// Read touch pads (MPR121), compare against threshold value
|
||||||
|
|
@ -1271,9 +1290,16 @@ void readSwitches() {
|
||||||
- 5*K4 //Fifth key
|
- 5*K4 //Fifth key
|
||||||
+ 2*K5 + K6 + trill3_interval*K7 //Trill keys. 3rd trill key interval controlled by setting
|
+ 2*K5 + K6 + trill3_interval*K7 //Trill keys. 3rd trill key interval controlled by setting
|
||||||
+ octaveR*12; //Octave rollers
|
+ octaveR*12; //Octave rollers
|
||||||
|
|
||||||
|
if (K3 && K7){
|
||||||
|
if (4 == trill3_interval) fingeredNoteUntransposed+=2; else fingeredNoteUntransposed+=4;
|
||||||
|
}
|
||||||
|
|
||||||
int fingeredNoteRead = fingeredNoteUntransposed + (octave - 3) * 12 + transpose - 12 + qTransp;
|
int fingeredNoteRead = fingeredNoteUntransposed + (octave - 3) * 12 + transpose - 12 + qTransp;
|
||||||
|
|
||||||
|
pcCombo1 = (K1 && K5 && !K2 && !K3);
|
||||||
|
pcCombo2 = (K2 && K6 && !K1 && !K3);
|
||||||
|
|
||||||
if (pinkyKey) pitchlatch = fingeredNoteUntransposed; //use pitchlatch to make settings based on note fingered
|
if (pinkyKey) pitchlatch = fingeredNoteUntransposed; //use pitchlatch to make settings based on note fingered
|
||||||
|
|
||||||
if (fingeredNoteRead != lastFingering) { //
|
if (fingeredNoteRead != lastFingering) { //
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
// Compile options, comment/uncomment to change
|
// Compile options, comment/uncomment to change
|
||||||
|
|
||||||
#define FIRMWARE_VERSION "1.4.2" // FIRMWARE VERSION NUMBER HERE <<<<<<<<<<<<<<<<<<<<<<<
|
#define FIRMWARE_VERSION "1.4.3" // FIRMWARE VERSION NUMBER HERE <<<<<<<<<<<<<<<<<<<<<<<
|
||||||
|
|
||||||
#define ON_Delay 20 // Set Delay after ON threshold before velocity is checked (wait for tounging peak)
|
#define ON_Delay 20 // Set Delay after ON threshold before velocity is checked (wait for tounging peak)
|
||||||
#define CCN_Port 5 // Controller number for portamento level
|
#define CCN_Port 5 // Controller number for portamento level
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue