- Sends MIDI messages instead of registering as a keyboard
- Fewer buttons but a shift function that doubles the number of functions, including the jog/shuttle wheels
- Different placement so that the hand can rest on the left and easily access buttons on the top and the right
The MIDI protocol has been around for decades and is primarily used in the audio and lighting world for input devices and synthesizers. As opposed to using an input device that emulates a keyboard, MIDI has got the advantage that the incoming messages can be easily translated to keyboard shortcuts, whereas an Arduino emulating a keyboard will always send the same shortcuts. This gives much more flexibility, e.g. when changing programs or modes within a program (think media, edit, and colour pages in Davinci Resolve).
Within Resolve, shortcuts can be configured (or are configured by default) for pretty much all functionality apart from curves and colour/lieft/gamma/gain wheels - without a dedicated control surface one still has to use the mouse to modify these parameters. In order to process incoming MIDI messages on Linux I use mididings. I actually gave a talk at KiwiPyCon 2014 about using mididings to control photography (or any) software on Linux. On Windows I wrote my processing code in C++ and used the rtmidi library which is easy to compile (I use MinGW gcc) and comes with many excellent examples.
The physical parts come down to a few buttons (cents to a few $), LED(s) (cents) and the jog/shuttle made by ALPS ($15-20). Figuring out the pins on the jog/shuttle was pretty straight-forward but this article goes through the process in more detail and might be useful to anyone trying to get a similar part working. I already had the plastic case and an Arduino to power the project lying around. In order to turn the Arduino into a MIDI device you'll have to replace the firmware on the ATmega used to communicate with the computer via USB (which is different from the main ATmega on an Arduino Uno!). The firmware and detailed instructions can be found on the HIDUINO Github page.
The shuttle controls forward and backward play at different speeds (J, K and L in Resolve) and the jog dial advances or rewinds the playhead one frame at a time (left and right arrow keys).
I still need to figure out a way to make an outer wheel for the shuttle and a knob or inner wheel for the jog rotary encoder. 3D printing might be the best way but first I'll have to learn how to create the virtual parts for it. At least the shuttle and jog wheels have sturdy grooves that should make it fairly easy to attach knobs or wheels to it.
At the moment, the Arduino will be connected to each button, LED and ALPS shuttle/jog through cables that go into the female headers on the little green board. Eventually, the Arduino will have to move into the enclosure and more sturdy, soldered connections between its pins and the components will be made.
Please use the comment section below or head over to Google+ or Twitter @tobiaswulff to discuss this article or any of my photography and videography work. My Flickr, 500px and Vimeo pages also provide some space to leave comments and keep up to date with my portfolio. Lastly, if you want to get updates on future blog posts, please subscribe to my RSS feed. I plan to publish a new article every Wednesday.