From 7b179d43436c066c264b1ad345ae475791b73bb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20St=C3=A4ck?= Date: Thu, 25 Jul 2019 00:51:34 +0200 Subject: [PATCH] Add settings for fast boot, bcas mode, 3rd trill, dac out --- NuEVI/NuEVI.ino | 80 ++++++++++++++++++--------------------------- NuEVI/globals.h | 5 +++ NuEVI/menu.cpp | 73 ++++++++++++++++++++++++++++++++--------- NuEVI/settings.cpp | 10 ++---- NuEVI/settings.h | 6 +--- simulation/Makefile | 1 + 6 files changed, 99 insertions(+), 76 deletions(-) diff --git a/NuEVI/NuEVI.ino b/NuEVI/NuEVI.ino index 8228e21..fdabeef 100644 --- a/NuEVI/NuEVI.ino +++ b/NuEVI/NuEVI.ino @@ -80,6 +80,11 @@ unsigned short vibControl = 0; unsigned short fastPatch[7] = {0,0,0,0,0,0,0}; +uint16_t bcasMode; //Legacy CASSIDY compile flag +uint16_t trill3_interval; +uint16_t fastBoot; +uint16_t dacMode; + byte rotatorOn = 0; byte currentRotation = 0; uint16_t rotations[4]; // semitones { -5, -10, -7, -14 }; @@ -262,14 +267,16 @@ void setup() { //Read eeprom data into global vars - readEEPROM(factoryReset); - + readEEPROM(); + //Parse out flags from bit field + fastBoot = dipSwBits & (1<<0); legacy = dipSwBits & (1<<1); legacyBrAct = dipSwBits & (1<<2); slowMidi = dipSwBits & (1<<3); gateOpenEnable = dipSwBits & (1<<4); specialKeyEnable = dipSwBits & (1<<5); + bcasMode = dipSwBits & (1<<6); activePatch = patch; touch_Thr = map(ctouchThrVal,ctouchHiLimit,ctouchLoLimit,ttouchLoLimit,ttouchHiLimit); @@ -295,8 +302,9 @@ void setup() { breathCalZero += analogRead(breathSensorPin); if (biteJumper) vibZeroBite += analogRead(A7); else vibZeroBite += touchRead(bitePin); digitalWrite( statusLedPin, i&1 ); - delay(250); + delay(fastBoot?75:250); //Shorter delay for fastboot } + vibZero /= sampleCount; breathCalZero /= sampleCount; vibZeroBite /= sampleCount; @@ -306,15 +314,17 @@ void setup() { vibThrBite = vibZeroBite - vibSquelchBite; vibThrBiteLo = vibZeroBite + vibSquelchBite; - digitalWrite(statusLedPin, LOW); - delay(250); - digitalWrite(statusLedPin,HIGH); - delay(250); - digitalWrite(statusLedPin,LOW); + if(!fastBoot) { + digitalWrite(statusLedPin, LOW); + delay(250); + digitalWrite(statusLedPin,HIGH); + delay(250); + digitalWrite(statusLedPin,LOW); - showVersion(); + showVersion(); - delay(1500); + delay(1500); + } mainState = NOTE_OFF; // initialize main state machine @@ -359,54 +369,37 @@ void loop() { mainState = RISE_WAIT; // Go to next state } if (legacy || legacyBrAct) { - #if defined(CASSIDY) - if (((pbUp > ((pitchbMaxVal + pitchbThrVal) / 2)) && (pbDn > ((pitchbMaxVal + pitchbThrVal) / 2)) && legacy) || - ((analogRead(breathSensorPin) < breathCalZero - 900) && legacyBrAct)) { // both pb pads touched or br suck - #else - if (((pbUp > ((pitchbMaxVal + pitchbThrVal) / 2)) && (pbDn > ((pitchbMaxVal + pitchbThrVal) / 2)) && legacy) || - ((analogRead(breathSensorPin) < breathCalZero - 800) && legacyBrAct && (pbUp > (pitchbMaxVal + pitchbThrVal) / 2) && (pbDn < (pitchbMaxVal + pitchbThrVal) / 2))) { // both pb pads touched or br suck - #endif + + bool bothPB = (pbUp > ((pitchbMaxVal + pitchbThrVal) / 2)) && (pbDn > ((pitchbMaxVal + pitchbThrVal) / 2)); + bool brSuck = analogRead(breathSensorPin) < (breathCalZero - (bcasMode?900:800)); + + if ( + (bothPB && legacy) || + (brSuck && legacyBrAct && (bothPB || bcasMode)) + ) { // both pb pads touched or br suck + + fingeredNoteUntransposed = patchLimit(fingeredNoteUntransposed + 1); if (exSensor >= ((extracThrVal + extracMaxVal) / 2)) { // instant midi setting if ((fingeredNoteUntransposed >= 73) && (fingeredNoteUntransposed <= 88)) { MIDIchannel = fingeredNoteUntransposed - 72; // Mid C and up - #if !defined(CASSIDY) - digitalWrite(statusLedPin, LOW); - delay(150); - digitalWrite(statusLedPin, HIGH); - #endif } } else { if (!pinkyKey) { // note number to patch number if (patch != fingeredNoteUntransposed) { patch = fingeredNoteUntransposed; doPatchUpdate = 1; - #if !defined(CASSIDY) - digitalWrite(statusLedPin, LOW); - delay(150); - digitalWrite(statusLedPin, HIGH); - #endif } } else { // hi and lo patch numbers if (fingeredNoteUntransposed > 75) { if (patch != patchLimit(fingeredNoteUntransposed + 24)) { patch = patchLimit(fingeredNoteUntransposed + 24); // add 24 to get high numbers 108 to 127 doPatchUpdate = 1; - #if !defined(CASSIDY) - digitalWrite(statusLedPin, LOW); - delay(150); - digitalWrite(statusLedPin, HIGH); - #endif } } else { if (patch != patchLimit(fingeredNoteUntransposed - 36)) { patch = patchLimit(fingeredNoteUntransposed - 36); // subtract 36 to get low numbers 0 to 36 doPatchUpdate = 1; - #if !defined(CASSIDY) - digitalWrite(statusLedPin, LOW); - delay(150); - digitalWrite(statusLedPin, HIGH); - #endif } } } @@ -1186,24 +1179,13 @@ void readSwitches() { } // Calculate midi note number from pressed keys - #if defined(CASSIDY) fingeredNoteUntransposed = startNote - 2*K1 - K2 - 3*K3 //"Trumpet valves" - 5*K4 //Fifth key - + 2*K5 + K6 + 3*K7 //Trill keys (different from standard) + + 2*K5 + K6 + trill3_interval*K7 //Trill keys. 3rd trill key interval controlled by setting + octaveR*12; //Octave rollers - #else - - fingeredNoteUntransposed = startNote - - 2*K1 - K2 - 3*K3 //"Trumpet valves" - - 5*K4 //Fifth key - + 2*K5 + K6 + 4*K7 //Trill keys - + octaveR*12; //Octave rollers - - #endif - int fingeredNoteRead = fingeredNoteUntransposed + transpose - 12 + qTransp; if (pinkyKey) pitchlatch = fingeredNoteUntransposed; //use pitchlatch to make settings based on note fingered diff --git a/NuEVI/globals.h b/NuEVI/globals.h index 56d0c41..5d1954a 100644 --- a/NuEVI/globals.h +++ b/NuEVI/globals.h @@ -73,6 +73,11 @@ extern byte currentRotation; extern uint16_t rotations[4]; extern uint16_t parallel; // semitones +extern uint16_t bcasMode; //Legacy CASSIDY compile flag +extern uint16_t trill3_interval; +extern uint16_t fastBoot; +extern uint16_t dacMode; + extern uint16_t wlPower; extern int touch_Thr; diff --git a/NuEVI/menu.cpp b/NuEVI/menu.cpp index a7c911b..286e4dd 100644 --- a/NuEVI/menu.cpp +++ b/NuEVI/menu.cpp @@ -156,10 +156,6 @@ void initDisplay() { void showVersion() { display.setTextColor(WHITE); display.setTextSize(1); - #if defined(CASSIDY) - display.setCursor(0,0); - display.print("BC"); - #endif #if defined(CVSCALEBOARD) display.setCursor(15,0); display.print("CV"); @@ -450,6 +446,10 @@ static void midiCustomDrawFunc(SubMenuRef __unused, char* __unused, const char** } } +//Poke at a certain bit in a bit field +void setBit(uint16_t &bitfield, const uint8_t pos, const uint8_t value) { + bitfield = (bitfield & ~(1< + //Read settings from eeprom. Returns wether or not anything was written (due to factory reset or upgrade) bool readEEPROM() { @@ -88,11 +91,8 @@ bool readEEPROM() { writeSetting(VIB_SENS_BITE_ADDR, VIB_SENS_BITE_FACTORY); writeSetting(VIB_SQUELCH_BITE_ADDR, VIB_SQUELCH_BITE_FACTORY); writeSetting(VIB_CONTROL_ADDR, VIB_CONTROL_FACTORY); - writeSetting(TRILL3_INTERVAL_ADDR, TRILL3_INTERVAL_FACTORY); - writeSetting(BCAS_MODE_ADDR, BCAS_MODE_FACTORY); writeSetting(DAC_MODE_ADDR, DAC_MODE_FACTORY); - writeSetting(FASTBOOT_ADDR, FASTBOOT_FACTORY); } writeSetting(VERSION_ADDR, EEPROM_VERSION); @@ -149,13 +149,9 @@ bool readEEPROM() { vibSensBite = readSetting(VIB_SENS_BITE_ADDR); vibSquelchBite = readSetting(VIB_SQUELCH_BITE_ADDR); vibControl = readSetting(VIB_CONTROL_ADDR); - - bcasMode = readSetting(BCAS_MODE_ADDR); trill3_interval = readSetting(TRILL3_INTERVAL_ADDR); if(trill3_interval<3 || trill3_interval > 4) trill3_interval = TRILL3_INTERVAL_FACTORY; //Deal with possible bad values - - fastBoot = readSetting(FASTBOOT_ADDR); dacMode = readSetting(DAC_MODE_ADDR); return hasWritten; diff --git a/NuEVI/settings.h b/NuEVI/settings.h index 06bea74..9da1886 100644 --- a/NuEVI/settings.h +++ b/NuEVI/settings.h @@ -53,9 +53,7 @@ #define VIB_SQUELCH_BITE_ADDR 94 #define VIB_CONTROL_ADDR 96 #define TRILL3_INTERVAL_ADDR 98 -#define BCAS_MODE_ADDR 100 -#define DAC_MODE_ADDR 102 -#define FASTBOOT_ADDR 104 +#define DAC_MODE_ADDR 100 @@ -110,9 +108,7 @@ #define VIB_CONTROL_FACTORY 0 #define TRILL3_INTERVAL_FACTORY 4 -#define BCAS_MODE_FACTORY 0 #define DAC_MODE_FACTORY DAC_MODE_BREATH -#define FASTBOOT_FACTORY 0 bool readEEPROM(); diff --git a/simulation/Makefile b/simulation/Makefile index 640a642..22f646f 100644 --- a/simulation/Makefile +++ b/simulation/Makefile @@ -36,6 +36,7 @@ CXXFILES= ../NuEVI/menu.cpp \ src/simusbmidi.cpp \ src/filters.cpp \ ../NuEVI/midi.cpp \ + ../NuEVI/settings.cpp \ src/Adafruit_GFX_sim.cpp \ src/Adafruit_SSD1306_sim.cpp \ src/Adafruit_MPR121_sim.cpp \