I have created a wrapper library to make programming MIDI controllers on the Teensy board dead easy and super fast. Simply instantiate object for each component like Buttons, Potentiometer, LED, rotary encoders, etc. and let the library handle all the dirty work of reading the raw values and deciding when to send MIDI signals. Enabling you to experiment and concentrate on your creative ideas and not waste too much time with the repetitive technical details and debugging code.
Just in a couple lines of code you can program a fully functioning MIDI controller.
Here’s an example of how simple things are:
boolean debug=false; // print to serial instead of midi boolean secondary=true; // enable secondary midi messages int midiChannel=1; // midi channel number // declare all your components here Button but(17,midiChannel,1,secondary,debug); // button 1 on pin 17 Button but2(16,midiChannel,2,secondary,debug); // button 2 on pin 16 Potentiometer pot(45,midiChannel,3,secondary,debug); // knob on pin 45 (A7) Led led(15,midiChannel,3,true); // led on pin 15 with PWM enabled, triggered on the same number as pot void setup(){ usbMIDI.setHandleControlChange(OnControlChange); // set event handler for CC } void loop(){ // add here all the input component reads pot.read(); // read knob and send midi messages but.read(); // read buttons and send midi messages but2.read(); usbMIDI.read(); // read all the incoming midi messages } //==================================================================== // event handlers void OnControlChange(byte channel, byte control, byte value){ // add all your output component sets that will trigger with cc led.setOn(channel,control,value); }
Currently only Buttons, Potentiometers and LEDs are supported. But I’m planning on adding RGB LED, rotary encoder, LED bars and ring and button pad classes.
Each component sends two sets of MIDI signals if enabled. For example Buttons send NoteOn, NoteOff, as well as ControlChange values so that they could be easily mapped in Toggle or Instant mode in software like Ableton Live. Also the Potentiometers send secondary NoteOns when values reach 0 or 127, à la MIDI Fighter Pro.
Download: github
To install extract the MIDIElements folder in your arduino/libraries directory