Teensy-based MIDI-controller

Similar projects worth following
MPE-DIY-Device using a Teensy LC, 4 finger-joysticks and a Led&Key-panel

When trying to play an electronic instrument as expressively as you would an acoustic instrument, it's a challenge to find the right combination of hardware and software.

For instance there are specialized woodwind- or guitar-controllers, which are dependent on a suitable hard- or software backend-system to work together as a playable instrument. Until more recently it was almost impossible to find a really expressive, yet affordable solution for that.

So called MPE-capable controllers now fill that gap, one of the less expensive versions is a keyboard-based variant with 2 octaves, yet they are still not exactly cheap. (Starting at about $300).

That’s what made me think about developing a cheaper DIY MPE-Controller.

More details please see the PDF attached.

To give you an impression, there is also an MP3 audioexample, recorded in one go with a matrix-controller and the MPE-controller. If you listen carefully, you will notice, that changes in sound and pitch are applied per note and not to the whole sound.

The software needed for the Teensy as sourcecode and as precompiled "firmware" are available on Github:

MPEG Video - 6.95 MB - 08/01/2019 at 14:44


Adobe Portable Document Format - 11.08 MB - 07/28/2019 at 21:34


  • 1 × Teensy LC Microcontroller, incl. MIDI via USB (Arduino compatible)
  • 4 × Fingerjoysticks Replacement-Parts for Gamecontrollers on a PCB (Arduino compatible)
  • 1 × LED&KEY Operation-Panel with Buttons, 7-Segment-Displays and Leds (Arduino compatible)

  • 1
    Cabling the MPE device's hardware-components

    Power supply:
    Ground - GND from Teensy (power-rail as described in the PDF attached)
    +3.3V - 3.3V from Teensy (power-rail as described in the PDF attached)

    Joystick 1:
    VRx - Pin 23/A9 (horizontal control)
    VRy - Pin 22/A8 (vertical control)
    SW - Pin 01 (switch when joystick is pressed down)
    +5V - +3.3 V (no worries, 3.3V works too) applicable to all joysticks!
    GND - Ground (we found common ground!) applicable to all joysticks!

    Joystick 2:
    VRx - Pin 21/A7 (horizontal control)
    VRy - Pin 20/A6 (vertical control)
    SW - Pin 02 (switch when joystick is pressed down)

    Joystick 3:
    VRx - Pin 19/A5 (horizontal control)
    VRy - Pin 18/A4 (vertical control)
    SW - Pin 03 (switch when joystick is pressed down)

    Joystick 4:
    VRx - Pin 17/A3 (horizontal control)
    VRy - Pin 16/A2 (vertical control)
    SW - Pin 04 (switch when joystick is pressed down)

    Control Panel:
    STB - Pin 15 (Strobe for TM1638 chip)
    CLK - Pin 14 (Clock for TM1638 chip)
    DIO - Pin 13 (Digital I/O for TM1638 chip)
    VCC - +3.3 V (GND from Teensy via power-rail)
    GND - Ground (3.3V from Teensy via power-rail)

    More details on this, as well as how to build the device, get the software running on the
    Teensy, how to operate the device and much more - please refer to the PDF attached.

View all instructions

Enjoy this project?



numinosum wrote 04/23/2020 at 14:47 point

Hello and many thanks for this amazing project!

I am just about to finish my build, I had some issues with the Led & Key display that I managed to resolve just by changing the corresponding pins in the code. Now all seems to be working well. This brings me to a question: what happened with the planned features: Expression pedal, Sustain and switch? Are these already provided for in the code? If so, could you help me identify the corresponding pins?

I would like to put the jacks before assembling the enclosure.

Thank you once again!



  Are you sure? yes | no

Mathias Brüssel wrote 10/27/2020 at 13:09 point

Hello Malen,
sorry I read your post only now, I did not get a notification so I just found out by accident. Glad to hear you could get your version of the project up and running. And no, I did not update the features that I thought about, yet. But instead it may be an option to use MIDI-assignments (maybe even using scripting) to add similar features with external MIDI-controllers in your DAW. In terms of a footcontrollers (Expression-pedal and several switches there are [USB] MIDI devices aimed at guitarists mainly for well under $100 that might be suitable as a prebuild solution. Sorry if that is not what you've been looking for - Mathias

  Are you sure? yes | no

Emmanuel oluga wrote 11/15/2019 at 13:33 point

OMG, this is totally awesome. I ma a beginner diyer. Ever since I found the roli I have been trying to take a jab at the MPE stuff, but didn't know how to, thanks for this tutorial. How would one use this with a teensy 4.0 and a midi controller like the novation launchkeys. Thank you for your help

  Are you sure? yes | no

Mathias Brüssel wrote 11/15/2019 at 15:28 point

@Emmanuel oluga Glad to hear you liked the idea. I am not 100% sure, if I get your question correctly - if you want to use an USB-MIDI-controller directly with the Teensy 4.0 you would need to attach it as a MIDI-class-compliant device over the USB-Host connection. The info where to solder this on and which library to use is here: regarding a suitable cable you can search the net for: "USB  A to USB 4 Pin Adapter".  But let me ask: what is your sound-source? Are you intending to use the Teensy 4 here as well? Are you planning to use the Launchkeys as an MPE-controller or "only" as a keyboard? If you are using a plugin in you computer as soundsource instead, maybe it would be easier to set up the Launchkey for your DAW for first experiments concerning the topic?

  Are you sure? yes | no

Emmanuel oluga wrote 11/15/2019 at 18:00 point

Thank you for your reply. I am new to all of this so I am still trying to figure it out. So I am trying to make an analog synthesizer, while also making a digital synthesizer using the Teensy. I have Rpi4 I just bough to use as a GUI for controls. I also wanted to know how to use the Teensy to control the analog synthesizer as a digital effects processor. So you see how me being a beginner makes this obsure to me. I just know I will use a launckey as a midi controller  and I wanted MPE, but didn't want to buy a roli or expensive MPE device. Thank you.

  Are you sure? yes | no

Mathias Brüssel wrote 08/23/2019 at 11:21 point

@Jackson Hi, thanks a lot for your feedback. What would  you exactly mean with isomorphic layout in this context? Maybe for instance to have 5 controllers for 5 fingers in shape of a pentagon?

The joysticks in general are playable surprisingly good (two potentiometers in two axis) the push-buttons can be a bit fiddly in terms of to tell when the would be pushed or not, that's why LEDs are used as a visual feedback for this. I came across two different types of joysticks, funnily the very cheap ones have micro-switches that work better, especially closer to the maximum positions, whereas the push-buttons of the other joysticks work smoother in middle-position. 

So in other words, acceptable but not ideal. 

Also, there will be an option for foot-switches here as well with a future version, the idea is to have a foot-switch to switch on/off the "freezing of parameters" for the channel with the note currently played at last.  

Also other buttons from external devices get used to trigger the note-inputs. A kind of companion for this thing here already is working with 4 8x8 arrays of microbuttons. But as explained in the PDF you also can attach a standard (at least 4 octaves) midi-keyboard.

  Are you sure? yes | no

Jackson wrote 08/20/2019 at 03:17 point

Very interesting! At some point I would really like to take a crack at making a full DIY MPE controller with a good isomorphic layout. Basically the dream. How playable are the joysticks as buttons?

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates