Merge pull request #2 from Trasselfrisyr/various-cleanup

Various cleanup
This commit is contained in:
Johan Berglund 2018-09-09 19:41:07 +02:00 committed by GitHub
commit 205689dbdf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

133
NuEVI.ino
View file

@ -22,9 +22,11 @@ PROGRAMME FUNCTION: EVI Wind Controller using the Freescale MP3V5004GP breath
// Compile options, comment/uncomment to change // Compile options, comment/uncomment to change
#define FIRMWARE_VERSION "1.2.6" // FIRMWARE VERSION NUMBER HERE <<<<<<<<<<<<<<<<<<<<<<<
#define REVB #define REVB
//Uncomment the following line if you have Teensyduino 1.4.1 or later, to make pitch bend over USB-MIDI work. //Uncomment the following line if you have Teensyduino 1.4.0 or earlier, to make pitch bend over USB-MIDI work.
#define NEWTEENSYDUINO #define NEWTEENSYDUINO
@ -41,6 +43,8 @@ PROGRAMME FUNCTION: EVI Wind Controller using the Freescale MP3V5004GP breath
#define pbDnPin 22 #define pbDnPin 22
#define vibratoPin 15 #define vibratoPin 15
#define breathSensorPin A0
#define dPin 3 #define dPin 3
#define ePin 4 #define ePin 4
#define uPin 5 #define uPin 5
@ -48,6 +52,7 @@ PROGRAMME FUNCTION: EVI Wind Controller using the Freescale MP3V5004GP breath
#define bLedPin 10 #define bLedPin 10
#define pLedPin 9 #define pLedPin 9
#define statusLedPin 13
#define vMeterPin A11 #define vMeterPin A11
@ -250,8 +255,6 @@ PROGRAMME FUNCTION: EVI Wind Controller using the Freescale MP3V5004GP breath
#define OLED_RESET 4 #define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET); Adafruit_SSD1306 display(OLED_RESET);
#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH 16
// 'NuEVI' logo // 'NuEVI' logo
static const unsigned char PROGMEM nuevi_logo_bmp[] = { static const unsigned char PROGMEM nuevi_logo_bmp[] = {
@ -321,8 +324,8 @@ static const unsigned char PROGMEM nuevi_logo_bmp[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
}; };
#if (SSD1306_LCDHEIGHT != 64) #ifndef SSD1306_128_64
#error("Height incorrect, please fix Adafruit_SSD1306.h!"); #error("Incorrect display type, please fix Adafruit_SSD1306.h!");
#endif #endif
@ -583,24 +586,11 @@ void setup() {
pinMode(bLedPin, OUTPUT); // breath indicator LED pinMode(bLedPin, OUTPUT); // breath indicator LED
pinMode(pLedPin, OUTPUT); // portam indicator LED pinMode(pLedPin, OUTPUT); // portam indicator LED
pinMode(13,OUTPUT); // Teensy onboard LED pinMode(statusLedPin,OUTPUT); // Teensy onboard LED
// if stored settings are not for current version, or Enter+Menu are pressed at startup, they are replaced by factory settings // if stored settings are not for current version, or Enter+Menu are pressed at startup, they are replaced by factory settings
if ((readSetting(VERSION_ADDR) != VERSION) && (readSetting(VERSION_ADDR) < 24) || (!digitalRead(ePin) && !digitalRead(mPin))){
writeSetting(VERSION_ADDR,VERSION);
writeSetting(BREATH_THR_ADDR,BREATH_THR_FACTORY);
writeSetting(BREATH_MAX_ADDR,BREATH_MAX_FACTORY);
writeSetting(PORTAM_THR_ADDR,PORTAM_THR_FACTORY);
writeSetting(PORTAM_MAX_ADDR,PORTAM_MAX_FACTORY);
writeSetting(PITCHB_THR_ADDR,PITCHB_THR_FACTORY);
writeSetting(PITCHB_MAX_ADDR,PITCHB_MAX_FACTORY);
writeSetting(EXTRAC_THR_ADDR,EXTRAC_THR_FACTORY);
writeSetting(EXTRAC_MAX_ADDR,EXTRAC_MAX_FACTORY);
writeSetting(CTOUCH_THR_ADDR,CTOUCH_THR_FACTORY);
}
if ((readSetting(VERSION_ADDR) != VERSION) || (!digitalRead(ePin) && !digitalRead(mPin))){ if ((readSetting(VERSION_ADDR) != VERSION) || (!digitalRead(ePin) && !digitalRead(mPin))){
writeSetting(VERSION_ADDR,VERSION); writeSetting(VERSION_ADDR,VERSION);
@ -638,6 +628,21 @@ void setup() {
writeSetting(VIB_RETN_ADDR,VIB_RETN_FACTORY); writeSetting(VIB_RETN_ADDR,VIB_RETN_FACTORY);
writeSetting(VIB_SQUELCH_ADDR,VIB_SQUELCH_FACTORY); writeSetting(VIB_SQUELCH_ADDR,VIB_SQUELCH_FACTORY);
writeSetting(VIB_DIRECTION_ADDR,VIB_DIRECTION_FACTORY); writeSetting(VIB_DIRECTION_ADDR,VIB_DIRECTION_FACTORY);
//Set threshold/max sensor values only if upgrading from something before version 24
//In other cases, these values are saved between factory resets
if (readSetting(VERSION_ADDR) < 24) {
writeSetting(VERSION_ADDR,VERSION);
writeSetting(BREATH_THR_ADDR,BREATH_THR_FACTORY);
writeSetting(BREATH_MAX_ADDR,BREATH_MAX_FACTORY);
writeSetting(PORTAM_THR_ADDR,PORTAM_THR_FACTORY);
writeSetting(PORTAM_MAX_ADDR,PORTAM_MAX_FACTORY);
writeSetting(PITCHB_THR_ADDR,PITCHB_THR_FACTORY);
writeSetting(PITCHB_MAX_ADDR,PITCHB_MAX_FACTORY);
writeSetting(EXTRAC_THR_ADDR,EXTRAC_THR_FACTORY);
writeSetting(EXTRAC_MAX_ADDR,EXTRAC_MAX_FACTORY);
writeSetting(CTOUCH_THR_ADDR,CTOUCH_THR_FACTORY);
}
} }
// read settings from EEPROM // read settings from EEPROM
breathThrVal = readSetting(BREATH_THR_ADDR); breathThrVal = readSetting(BREATH_THR_ADDR);
@ -714,33 +719,34 @@ void setup() {
display.display(); display.display();
//auto-calibrate the vibrato threshold while showing splash screen //auto-calibrate the vibrato threshold while showing splash screen
int cv1=touchRead(15); int cv1=touchRead(vibratoPin);
int bc1=analogRead(A0); int bc1=analogRead(breathSensorPin);
digitalWrite(13,HIGH); digitalWrite(statusLedPin,HIGH);
delay(250); delay(250);
int cv2=touchRead(15); int cv2=touchRead(vibratoPin);
int bc2=analogRead(A0); int bc2=analogRead(breathSensorPin);
digitalWrite(13,LOW); digitalWrite(statusLedPin,LOW);
delay(250); delay(250);
int cv3=touchRead(15); int cv3=touchRead(vibratoPin);
int bc3=analogRead(A0); int bc3=analogRead(breathSensorPin);
digitalWrite(13,HIGH); digitalWrite(statusLedPin,HIGH);
delay(250); delay(250);
digitalWrite(13,LOW); digitalWrite(statusLedPin,LOW);
int cv4=touchRead(15); int cv4=touchRead(vibratoPin);
int bc4=analogRead(A0); int bc4=analogRead(breathSensorPin);
vibZero=(cv1+cv2+cv3+cv4)/4; vibZero=(cv1+cv2+cv3+cv4)/4;
vibThr=vibZero-vibSquelch; vibThr=vibZero-vibSquelch;
vibThrLo=vibZero+vibSquelch; vibThrLo=vibZero+vibSquelch;
breathCalZero=(bc1+bc2+bc3+bc4)/4; breathCalZero=(bc1+bc2+bc3+bc4)/4;
delay(250); delay(250);
digitalWrite(13,HIGH); digitalWrite(statusLedPin,HIGH);
delay(250); delay(250);
digitalWrite(13,LOW); digitalWrite(statusLedPin,LOW);
display.setTextColor(WHITE); display.setTextColor(WHITE);
display.setTextSize(1); display.setTextSize(1);
display.setCursor(85,52); display.setCursor(85,52);
display.println("v.1.2.6"); // FIRMWARE VERSION NUMBER HERE <<<<<<<<<<<<<<<<<<<<<<< display.print("v.");
display.println(FIRMWARE_VERSION);
display.display(); display.display();
delay(1500); delay(1500);
@ -756,7 +762,7 @@ void setup() {
Serial3.begin(31250); // start serial with midi baudrate 31250 Serial3.begin(31250); // start serial with midi baudrate 31250
Serial3.flush(); Serial3.flush();
digitalWrite(13,HIGH); // Switch on the onboard LED to indicate power on/ready digitalWrite(statusLedPin,HIGH); // Switch on the onboard LED to indicate power on/ready
} }
@ -769,7 +775,7 @@ void loop() {
void mainLoop() { void mainLoop() {
FilterOnePole breathFilter( LOWPASS, filterFreq ); // create a one pole (RC) lowpass filter FilterOnePole breathFilter( LOWPASS, filterFreq ); // create a one pole (RC) lowpass filter
while (1){ while (1){
breathFilter.input(analogRead(A0)); breathFilter.input(analogRead(breathSensorPin));
pressureSensor = constrain((int)breathFilter.output(),0,4095); // Get the filtered pressure sensor reading from analog pin A0, input from sensor MP3V5004GP pressureSensor = constrain((int)breathFilter.output(),0,4095); // Get the filtered pressure sensor reading from analog pin A0, input from sensor MP3V5004GP
//pressureSensor = analogRead(A0); //pressureSensor = analogRead(A0);
//pressureSensor = smooth(analogRead(0), filterVal, smoothedVal); // second parameter determines smoothness - 0 is off, .9999 is max smooth //pressureSensor = smooth(analogRead(0), filterVal, smoothedVal); // second parameter determines smoothness - 0 is off, .9999 is max smooth
@ -798,35 +804,35 @@ void mainLoop() {
if (exSensor >= ((extracThrVal+extracMaxVal)/2)){ // instant midi setting if (exSensor >= ((extracThrVal+extracMaxVal)/2)){ // instant midi setting
if ((fingeredNoteUntransposed >= 73) && (fingeredNoteUntransposed <= 88)) { if ((fingeredNoteUntransposed >= 73) && (fingeredNoteUntransposed <= 88)) {
MIDIchannel = fingeredNoteUntransposed - 72; // Mid C and up MIDIchannel = fingeredNoteUntransposed - 72; // Mid C and up
digitalWrite(13,LOW); digitalWrite(statusLedPin,LOW);
delay(150); delay(150);
digitalWrite(13,HIGH); digitalWrite(statusLedPin,HIGH);
} }
} else { } else {
if (!pinkyKey){ // note number to patch number if (!pinkyKey){ // note number to patch number
if (patch != fingeredNoteUntransposed){ if (patch != fingeredNoteUntransposed){
patch = fingeredNoteUntransposed; patch = fingeredNoteUntransposed;
doPatchUpdate = 1; doPatchUpdate = 1;
digitalWrite(13,LOW); digitalWrite(statusLedPin,LOW);
delay(150); delay(150);
digitalWrite(13,HIGH); digitalWrite(statusLedPin,HIGH);
} }
} else { // hi and lo patch numbers } else { // hi and lo patch numbers
if (fingeredNoteUntransposed > 75){ if (fingeredNoteUntransposed > 75){
if (patch != patchLimit(fingeredNoteUntransposed + 24)){ if (patch != patchLimit(fingeredNoteUntransposed + 24)){
patch = patchLimit(fingeredNoteUntransposed + 24); // add 24 to get high numbers 108 to 127 patch = patchLimit(fingeredNoteUntransposed + 24); // add 24 to get high numbers 108 to 127
doPatchUpdate = 1; doPatchUpdate = 1;
digitalWrite(13,LOW); digitalWrite(statusLedPin,LOW);
delay(150); delay(150);
digitalWrite(13,HIGH); digitalWrite(statusLedPin,HIGH);
} }
} else { } else {
if (patch != patchLimit(fingeredNoteUntransposed - 36)){ if (patch != patchLimit(fingeredNoteUntransposed - 36)){
patch = patchLimit(fingeredNoteUntransposed - 36); // subtract 36 to get low numbers 0 to 36 patch = patchLimit(fingeredNoteUntransposed - 36); // subtract 36 to get low numbers 0 to 36
doPatchUpdate = 1; doPatchUpdate = 1;
digitalWrite(13,LOW); digitalWrite(statusLedPin,LOW);
delay(150); delay(150);
digitalWrite(13,HIGH); digitalWrite(statusLedPin,HIGH);
} }
} }
} }
@ -1186,6 +1192,9 @@ unsigned int breathCurve(unsigned int inputVal){
// Z2 // Z2
return multiMap(inputVal,curveIn,curveZ2,17); return multiMap(inputVal,curveIn,curveZ2,17);
break; break;
default: //Fallback option that should never be reached, use linear
return inputVal;
break;
} }
} }
@ -1417,10 +1426,10 @@ void pitch_bend(){
pitchBend=constrain(pitchBend, 0, 16383); pitchBend=constrain(pitchBend, 0, 16383);
if (subVibSquelch && (8192 != pitchBend)){ if (subVibSquelch && (8192 != pitchBend)){
digitalWrite(13,LOW); digitalWrite(statusLedPin,LOW);
vibLedOff = 1; vibLedOff = 1;
} else if (vibLedOff){ } else if (vibLedOff){
digitalWrite(13,HIGH); digitalWrite(statusLedPin,HIGH);
vibLedOff = 0; vibLedOff = 0;
} }
@ -1445,25 +1454,25 @@ void doorKnobCheck(){
if ((touchValue[K4Pin] < ctouchThrVal) && (touchValue[R1Pin] < ctouchThrVal) && (touchValue[R2Pin] < ctouchThrVal) && (touchValue[R3Pin] < ctouchThrVal)){ // doorknob grip on canister if ((touchValue[K4Pin] < ctouchThrVal) && (touchValue[R1Pin] < ctouchThrVal) && (touchValue[R2Pin] < ctouchThrVal) && (touchValue[R3Pin] < ctouchThrVal)){ // doorknob grip on canister
if (pbUp > ((pitchbMaxVal + pitchbThrVal)/2)) { if (pbUp > ((pitchbMaxVal + pitchbThrVal)/2)) {
gateOpen = 1; gateOpen = 1;
digitalWrite(13,LOW); digitalWrite(statusLedPin,LOW);
delay(50); delay(50);
digitalWrite(13,HIGH); digitalWrite(statusLedPin,HIGH);
delay(50); delay(50);
} }
else if (pbDn > ((pitchbMaxVal + pitchbThrVal)/2)) { else if (pbDn > ((pitchbMaxVal + pitchbThrVal)/2)) {
gateOpen = 0; gateOpen = 0;
midiPanic(); midiPanic();
digitalWrite(13,LOW); digitalWrite(statusLedPin,LOW);
delay(50); delay(50);
digitalWrite(13,HIGH); digitalWrite(statusLedPin,HIGH);
delay(50); delay(50);
digitalWrite(13,LOW); digitalWrite(statusLedPin,LOW);
delay(50); delay(50);
digitalWrite(13,HIGH); digitalWrite(statusLedPin,HIGH);
delay(50); delay(50);
digitalWrite(13,LOW); digitalWrite(statusLedPin,LOW);
delay(50); delay(50);
digitalWrite(13,HIGH); digitalWrite(statusLedPin,HIGH);
delay(700); delay(700);
} }
} }
@ -1787,24 +1796,24 @@ void menu() {
legacyBrAct = !legacyBrAct; legacyBrAct = !legacyBrAct;
dipSwBits = dipSwBits ^ (1<<2); dipSwBits = dipSwBits ^ (1<<2);
writeSetting(DIPSW_BITS_ADDR,dipSwBits); writeSetting(DIPSW_BITS_ADDR,dipSwBits);
digitalWrite(13,LOW); digitalWrite(statusLedPin,LOW);
delay(150); delay(150);
digitalWrite(13,HIGH); digitalWrite(statusLedPin,HIGH);
delay(150); delay(150);
digitalWrite(13,LOW); digitalWrite(statusLedPin, LOW);
delay(150); delay(150);
digitalWrite(13,HIGH); digitalWrite(statusLedPin,HIGH);
} else if ((exSensor >= ((extracThrVal+extracMaxVal)/2))){ // switch pb pad activated legacy settings control on/off } else if ((exSensor >= ((extracThrVal+extracMaxVal)/2))){ // switch pb pad activated legacy settings control on/off
legacy = !legacy; legacy = !legacy;
dipSwBits = dipSwBits ^ (1<<1); dipSwBits = dipSwBits ^ (1<<1);
writeSetting(DIPSW_BITS_ADDR,dipSwBits); writeSetting(DIPSW_BITS_ADDR,dipSwBits);
digitalWrite(13,LOW); digitalWrite(statusLedPin,LOW);
delay(150); delay(150);
digitalWrite(13,HIGH); digitalWrite(statusLedPin,HIGH);
delay(150); delay(150);
digitalWrite(13,LOW); digitalWrite(statusLedPin,LOW);
delay(150); delay(150);
digitalWrite(13,HIGH); digitalWrite(statusLedPin,HIGH);
} else if (pinkyKey){ } else if (pinkyKey){
display.ssd1306_command(SSD1306_DISPLAYON); display.ssd1306_command(SSD1306_DISPLAYON);
state = ROTATOR_MENU; state = ROTATOR_MENU;