Tutorial: Arduino & Control Chain

Hi there once again fellow MOD-monsters! As some of you might know, we are currently in the beta testing phase for our new Control Chain footswitch extension. At the same time, we have also released the brand new Arduino Control Chain shield, allowing you to build your own awesome controllers. If you’re thinking, hey Jesse, what is all that Control Chain talk about? *Control Chain is an open standard, including hardware, communication protocol, cables and connectors, developed to connect external controllers to the MOD. For example, footswitch extensions, expression pedals and so on. Comparing to MIDI, Control Chain is way more powerful. For example, instead of using hard-coded values as MIDI does, Control Chain has what is called device descriptor and its assignment (or mapping) message contains the full information about the parameter being assigned, such as parameter name, absolute value, range and any other data. Having all that information on the device side allows developers to create powerful peripherals that can, for example, show the absolute parameter value on a display, use different LED colors to indicate a specific state, etc. Pretty neat, right? Until now, you could find two examples, for a simple momentary button and potentiometer, on our GitHub page, but today we will add a new example: we will build a Control Chain device with expression pedal inputs.

What do I need?

  1. One Arduino Uno or Due
  2. One Arduino Control Chain shield
  3. One stereo (TRS) jack for every expression pedal input that you want (Max: 4 (Uno), 8(Due))
  4. A soldering iron, some wire and some soldering tin
  5. (Optional) Something to put your final build in

The schematic

Because the Arduino has very high impedance analog inputs, there is no need for any current limiting resistor. We can simply hook up the TRS jacks as follows: (Tip to 5V, ring to signal and sleeve to ground)* (*) not all expression pedals are made equal, some manufacturers use a different mapping than the one described above. Another common mapping is: Tip to signal, ring to 5V, sleeve to ground. (For example on the Roland EV-5)

The code

The Arduino code is quite simple, it reads the ADC values using the analogRead() function, and stores it into a variable. The Control Chain library takes care of the rest. The code is written in such a way that you can change the define at the top of the code to the amount of ports that you want, and not have to rewrite any code. Do you want 3 expression pedal ports? #define amountOfPorts 3 The maximum amount of ports for an Arduino Uno is 4. The Arduino Due can provide a maximum of 8 ports.

The build

  1. Solder wires to your TRS jack inputs
  2. Twist the wires together
  3. Solder the sleeves to the ground strip on the CC shield
  4. Solder the tips to the 5v strip on the CC shield
  5. Solder the rings to the corresponding analog inputs on the CC shield
Attach the CC shield to the Arduino, now your device should look a little like this:
  1. Follow the instructions on our Github Page and install the dependencies
  2. Change the define in the code to the amount of ports connected
  3. Upload the code to your Arduino
  4. Time for a test drive!
    1. Connect the MOD Duo to the “main” Control Chain port on your new device
    2. Connect your expression pedals and try them out with your MOD Duo!
  5. (Optional) Create an enclosure for (semi-)permanent installation, I used an old smartphone-box that I had laying around somewhere :)

The end result

You just built your own Control Chain device, and we hope with many more to come. We are looking forward to seeing what all you wonderful people come up with! Don’t hesitate to come and talk to us on the forums if you have any questions about Control Chain devices, the Arduino shield or our favourite musicians. Talk to you later! P.S. Vulfpeck is great

3 comments

  • p.s. really? limited to 4 controllers? :(
    more, virtually, with shift registers?

    Peter Lutek
  • so simple.
    so clear.

    right on about vulfpeck, btw.

    cheers!
    .pltk.

    Peter Lutek
  • ok, sorry for the chatter here! :P …done some reading, and now know that shift registers are for digital pins, but we can expand easily the number of analog inputs with something like this:

    http://www.gravitech.us/i2c128anco.html

    sweet!
    .pltk.

    Peter Lutek

Leave a comment