commit
b892d36e05
8 changed files with 6813 additions and 1241 deletions
File diff suppressed because it is too large
Load diff
1386
NuEVI/NuEVI.ino
Normal file
1386
NuEVI/NuEVI.ino
Normal file
File diff suppressed because it is too large
Load diff
100
NuEVI/hardware.h
Normal file
100
NuEVI/hardware.h
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
#ifndef __HARDWARE_H
|
||||||
|
#define __HARDWARE_H
|
||||||
|
|
||||||
|
#define REVB
|
||||||
|
|
||||||
|
//Comment out the following line if you have Teensyduino 1.4.0 or earlier, to make pitch bend over USB-MIDI work.
|
||||||
|
#define NEWTEENSYDUINO
|
||||||
|
|
||||||
|
|
||||||
|
// Pin definitions
|
||||||
|
|
||||||
|
// Teensy pins
|
||||||
|
|
||||||
|
#define specialKeyPin 0 // SK or S2
|
||||||
|
#define halfPitchBendKeyPin 1 // PD or S1
|
||||||
|
|
||||||
|
#define bitePin 17
|
||||||
|
#define extraPin 16
|
||||||
|
#define pbUpPin 23
|
||||||
|
#define pbDnPin 22
|
||||||
|
#define vibratoPin 15
|
||||||
|
|
||||||
|
#define breathSensorPin A0
|
||||||
|
|
||||||
|
#define dPin 3
|
||||||
|
#define ePin 4
|
||||||
|
#define uPin 5
|
||||||
|
#define mPin 6
|
||||||
|
|
||||||
|
#define bLedPin 10
|
||||||
|
#define pLedPin 9
|
||||||
|
#define statusLedPin 13
|
||||||
|
|
||||||
|
#define vMeterPin A11
|
||||||
|
|
||||||
|
#define PBD 12
|
||||||
|
#define UPWD 1
|
||||||
|
#define DNWD 0
|
||||||
|
|
||||||
|
//Which serial port to use for MIDI
|
||||||
|
#define MIDI_SERIAL Serial3
|
||||||
|
|
||||||
|
#if defined(REVB)
|
||||||
|
|
||||||
|
// MPR121 pins Rev B (angled pins at top edge for main keys and rollers)
|
||||||
|
|
||||||
|
#define R1Pin 0
|
||||||
|
#define R2Pin 2
|
||||||
|
#define R3Pin 4
|
||||||
|
#define R4Pin 6
|
||||||
|
#define R5Pin 8
|
||||||
|
|
||||||
|
#define K4Pin 10
|
||||||
|
#define K1Pin 1
|
||||||
|
#define K2Pin 3
|
||||||
|
#define K3Pin 5
|
||||||
|
#define K5Pin 7
|
||||||
|
#define K6Pin 9
|
||||||
|
#define K7Pin 11
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PINOUT ON PCB vs PINS ON MPR121 - Rev. B
|
||||||
|
*
|
||||||
|
* (R1) (R2) (R3/6) (R4) (R5) (K4) <-> (00) (02) (04) (06) (08) (10)
|
||||||
|
*
|
||||||
|
* (K1) (K2) (K3) (K5) (K6) (K7) <-> (01) (03) (05) (07) (09) (11)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
# else
|
||||||
|
|
||||||
|
// MPR121 pins Rev A (upright pins below MPR121 for main keys and rollers)
|
||||||
|
|
||||||
|
#define R1Pin 10
|
||||||
|
#define R2Pin 11
|
||||||
|
#define R3Pin 8
|
||||||
|
#define R4Pin 9
|
||||||
|
#define R5Pin 6
|
||||||
|
|
||||||
|
#define K4Pin 7
|
||||||
|
#define K1Pin 4
|
||||||
|
#define K2Pin 5
|
||||||
|
#define K3Pin 2
|
||||||
|
#define K5Pin 3
|
||||||
|
#define K6Pin 0
|
||||||
|
#define K7Pin 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PINOUT ON PCB vs PINS ON MPR121 - Rev. A
|
||||||
|
*
|
||||||
|
* (R2) (R4) (K4) (K2) (K5) (K7) <-> (11) (09) (07) (05) (03) (01)
|
||||||
|
*
|
||||||
|
* (R1) (R3/6) (R5) (K1) (K3) (K6) <-> (10) (08) (06) (04) (02) (00)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif //REVB
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
43
NuEVI/menu.h
Normal file
43
NuEVI/menu.h
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
#ifndef __MENU_H
|
||||||
|
#define __MENU_H
|
||||||
|
|
||||||
|
|
||||||
|
#define MENU_ROW_HEIGHT 9
|
||||||
|
#define MENU_HEADER_OFFSET 3
|
||||||
|
|
||||||
|
|
||||||
|
//display states
|
||||||
|
#define DISPLAYOFF_IDL 0
|
||||||
|
#define MAIN_MENU 1
|
||||||
|
#define PATCH_VIEW 2
|
||||||
|
#define BREATH_ADJ_IDL 10
|
||||||
|
#define BREATH_ADJ_THR 11
|
||||||
|
#define BREATH_ADJ_MAX 12
|
||||||
|
#define PORTAM_ADJ_IDL 20
|
||||||
|
#define PORTAM_ADJ_THR 21
|
||||||
|
#define PORTAM_ADJ_MAX 22
|
||||||
|
#define PITCHB_ADJ_IDL 30
|
||||||
|
#define PITCHB_ADJ_THR 31
|
||||||
|
#define PITCHB_ADJ_MAX 32
|
||||||
|
#define EXTRAC_ADJ_IDL 40
|
||||||
|
#define EXTRAC_ADJ_THR 41
|
||||||
|
#define EXTRAC_ADJ_MAX 42
|
||||||
|
#define VIBRAT_ADJ_IDL 50
|
||||||
|
#define VIBRAT_ADJ_THR 51
|
||||||
|
#define VIBRAT_ADJ_DPT 52
|
||||||
|
#define CTOUCH_ADJ_IDL 60
|
||||||
|
#define CTOUCH_ADJ_THR 61
|
||||||
|
#define SETUP_BR_MENU 80
|
||||||
|
#define SETUP_CT_MENU 90
|
||||||
|
#define ROTATOR_MENU 100
|
||||||
|
#define VIBRATO_MENU 110
|
||||||
|
|
||||||
|
extern byte subVibSquelch;
|
||||||
|
|
||||||
|
|
||||||
|
void initDisplay();
|
||||||
|
void showVersion();
|
||||||
|
void menu();
|
||||||
|
void drawSensorPixels();
|
||||||
|
|
||||||
|
#endif
|
3773
NuEVI/menu.ino
Normal file
3773
NuEVI/menu.ino
Normal file
File diff suppressed because it is too large
Load diff
25
NuEVI/midi.h
Normal file
25
NuEVI/midi.h
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
#ifndef __MIDI_H
|
||||||
|
#define __MIDI_H
|
||||||
|
|
||||||
|
//Enable use of USB and serial MIDI
|
||||||
|
#define USE_MIDI_USB
|
||||||
|
#define USE_MIDI_SERIAL
|
||||||
|
|
||||||
|
//Set / get current midi channel
|
||||||
|
void midiSetChannel(byte channel);
|
||||||
|
byte midiGetChannel();
|
||||||
|
|
||||||
|
void midiSendProgramChange(int patch);
|
||||||
|
void midiSendControlChange(int ccParam, int ccValue);
|
||||||
|
void midiSendNoteOn(byte note, int velocity);
|
||||||
|
void midiSendNoteOff(byte note);
|
||||||
|
void midiSendAfterTouch(byte value);
|
||||||
|
void midiSendPitchBend(int value);
|
||||||
|
|
||||||
|
|
||||||
|
void midiReset(); // reset controllers
|
||||||
|
void midiPanic(); // turn all notes off
|
||||||
|
|
||||||
|
void midiInitialize(byte channel=1);
|
||||||
|
|
||||||
|
#endif
|
133
NuEVI/midi.ino
Normal file
133
NuEVI/midi.ino
Normal file
|
@ -0,0 +1,133 @@
|
||||||
|
#include "midi.h"
|
||||||
|
#include "hardware.h"
|
||||||
|
|
||||||
|
int midiChannel;
|
||||||
|
|
||||||
|
|
||||||
|
void midiSetChannel(byte channel) {
|
||||||
|
midiChannel = constrain(channel, 1, 16);
|
||||||
|
}
|
||||||
|
|
||||||
|
byte midiGetChannel() {
|
||||||
|
return midiChannel;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void midiSendProgramChange(int patch) {
|
||||||
|
usbMIDI.sendProgramChange(patch-1, midiChannel);
|
||||||
|
dinMIDIsendProgramChange(patch-1, midiChannel-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void midiSendControlChange(int ccParam, int ccValue) {
|
||||||
|
usbMIDI.sendControlChange(ccParam, ccValue, midiChannel);
|
||||||
|
dinMIDIsendControlChange(ccParam, ccValue, midiChannel - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void midiSendNoteOn(byte note, int velocity) {
|
||||||
|
usbMIDI.sendNoteOn(note, velocity, midiChannel);
|
||||||
|
dinMIDIsendNoteOn(note, velocity, midiChannel - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void midiSendNoteOff(byte note) {
|
||||||
|
//Always send velocity 0 on note off to avoid confusing some synthesizers
|
||||||
|
usbMIDI.sendNoteOn(note, 0, midiChannel);
|
||||||
|
dinMIDIsendNoteOn(note, 0, midiChannel - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void midiSendAfterTouch(byte value) {
|
||||||
|
usbMIDI.sendAfterTouch(value, midiChannel);
|
||||||
|
dinMIDIsendAfterTouch(value, midiChannel - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void midiSendPitchBend(int value) {
|
||||||
|
#if defined(NEWTEENSYDUINO)
|
||||||
|
usbMIDI.sendPitchBend(value-8192, midiChannel); // newer teensyduino "pitchBend-8192" older just "pitchBend"... strange thing to change
|
||||||
|
#else
|
||||||
|
usbMIDI.sendPitchBend(value, midiChannel);
|
||||||
|
#endif
|
||||||
|
dinMIDIsendPitchBend(value, midiChannel - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void midiReset() { // reset controllers
|
||||||
|
midiSendControlChange(7, 100);
|
||||||
|
midiSendControlChange(11, 127);
|
||||||
|
}
|
||||||
|
|
||||||
|
void midiPanic() { // all notes off
|
||||||
|
midiSendControlChange(123, 0);
|
||||||
|
for (int i = 0; i < 128; i++){
|
||||||
|
midiSendNoteOff(i);
|
||||||
|
delay(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void midiInitialize(byte channel) {
|
||||||
|
MIDI_SERIAL.begin(31250); // start serial with midi baudrate 31250
|
||||||
|
MIDI_SERIAL.flush();
|
||||||
|
midiSetChannel(channel);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Serial midi functions
|
||||||
|
|
||||||
|
// Send a three byte din midi message
|
||||||
|
void midiSend3B(byte midistatus, byte data1, byte data2) {
|
||||||
|
MIDI_SERIAL.write(midistatus);
|
||||||
|
MIDI_SERIAL.write(data1);
|
||||||
|
MIDI_SERIAL.write(data2);
|
||||||
|
}
|
||||||
|
|
||||||
|
//**************************************************************
|
||||||
|
|
||||||
|
// Send a two byte din midi message
|
||||||
|
void midiSend2B(byte midistatus, byte data) {
|
||||||
|
MIDI_SERIAL.write(midistatus);
|
||||||
|
MIDI_SERIAL.write(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
//**************************************************************
|
||||||
|
|
||||||
|
// Send din pitchbend
|
||||||
|
void dinMIDIsendPitchBend(int pb, byte ch) {
|
||||||
|
int pitchLSB = pb & 0x007F;
|
||||||
|
int pitchMSB = (pb >>7) & 0x007F;
|
||||||
|
midiSend3B((0xE0 | ch), pitchLSB, pitchMSB);
|
||||||
|
}
|
||||||
|
|
||||||
|
//**************************************************************
|
||||||
|
|
||||||
|
// Send din control change
|
||||||
|
void dinMIDIsendControlChange(byte ccNumber, int cc, byte ch) {
|
||||||
|
midiSend3B((0xB0 | ch), ccNumber, cc);
|
||||||
|
}
|
||||||
|
|
||||||
|
//**************************************************************
|
||||||
|
|
||||||
|
// Send din note on
|
||||||
|
void dinMIDIsendNoteOn(byte note, int vel, byte ch) {
|
||||||
|
midiSend3B((0x90 | ch), note, vel);
|
||||||
|
}
|
||||||
|
|
||||||
|
//**************************************************************
|
||||||
|
|
||||||
|
// Send din note off
|
||||||
|
void dinMIDIsendNoteOff(byte note, int vel, byte ch) {
|
||||||
|
midiSend3B((0x80 | ch), note, vel);
|
||||||
|
}
|
||||||
|
|
||||||
|
//**************************************************************
|
||||||
|
|
||||||
|
// Send din aftertouch
|
||||||
|
void dinMIDIsendAfterTouch(byte value, byte ch) {
|
||||||
|
midiSend2B((0xD0 | ch), value);
|
||||||
|
}
|
||||||
|
|
||||||
|
//**************************************************************
|
||||||
|
|
||||||
|
// Send din program change
|
||||||
|
void dinMIDIsendProgramChange(byte value, byte ch) {
|
||||||
|
midiSend2B((0xC0 | ch), value);
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue