Please ensure Javascript is enabled for purposes of website accessibility Jump to content

DIY MIDI program change footswitch


aaronlyon
 Share

Recommended Posts

I made a two-button footswitch for changing Helix patches up and down, using a generic (Elegoo) Arduino Nano board. It sends MIDI program change messages, and is endlessly customizable.

 

Complete parts list:

 

Hammond 1590a enclosure

Elegoo nano (set of three for cheap https://www.amazon.com/Arduino-Elegoo-ATmega328P-without-compatible/dp/B0713XK923 )

two SPST momentary (normally open) switches

LED and 220 ohm resistor (optional)

panel-mount MIDI jack

panel-mount 9v jack (optional, easy to power from 9v battery--Nano draws only 25mA, and only 37mA while LED is lit)

hookup wire

 

My code is pasted below. Entire project took less than two hours, and cost less than dinner.

 

// midi.controller
// Sends midi program change
// Aaron Lyon April 2018

#include <MIDI.h>

MIDI_CREATE_DEFAULT_INSTANCE();

byte patchNum = 0;

#define BUTTON_PIN_1 2
#define BUTTON_PIN_2 3
#define LED_PIN 13

void setup() {
  pinMode(BUTTON_PIN_1, INPUT_PULLUP);
  pinMode(BUTTON_PIN_2, INPUT_PULLUP);
  pinMode(LED_PIN, OUTPUT);
  MIDI.begin(MIDI_CHANNEL_OMNI);
}

void loop() {
  if (digitalRead(BUTTON_PIN_1) == LOW && patchNum < 99) {
    // Next Program
    digitalWrite(LED_PIN, HIGH );
    patchNum++;
    MIDI.sendProgramChange(patchNum, 1);
    delay(200);
    digitalWrite(LED_PIN, LOW );
  }
  if (digitalRead(BUTTON_PIN_2) == LOW && patchNum >= 1) {
    // Next Program
    digitalWrite(LED_PIN, HIGH );
    patchNum--;
    MIDI.sendProgramChange(patchNum, 1);
    delay(200);
    digitalWrite(LED_PIN, LOW );
  }

}
 

midi2.jpg

midi1.jpg

  • Like 1
  • Upvote 1
Link to comment
Share on other sites

I built a new program switcher into a plywood base for my Line 6 50 receiver and an expression pedal, for ease of portability and setup.

 

Let me know if you would like to buy the MIDI pedal I built, shown above, the one in the Hammond 1950a chassis.

 

 

board1.jpg

board2.jpg

Link to comment
Share on other sites

  • 3 months later...

 

 

I'm also experimenting with sending midi signals to the Helix, but sending the preset number on channel 1 does not change the preset correctly.

I expected that with the command:

 

MIDI.sendProgramChange (10, 1);

 

the helix selected preset 10 and with the command

 

MIDI.sendProgramChange (xxx, 1);

 

select preset n ° xxx while instead with any number only select patch 0 or 60

did any of you have the same problem?

Link to comment
Share on other sites

  • 4 months later...

aaronlyon

is it possible to send a MIDI-command to change snapshots? I have an idea: I use sometimes the Helix Native as a stand-alone-program on my PC. I not realy need a DAW for using Native. So, in some presets I use, there are snapshots. The idea now is: sending a MIDI-command with a homemade footswitch to change snapshots. Can you test this thing or what do you think? is that possible?  :-)

 

Can you give us the used MIDI-Library, please?

Link to comment
Share on other sites

3 hours ago, tuxmrk said:

I use sometimes the Helix Native as a stand-alone-program on my PC. I not realy need a DAW for using Native.

How do you use HxN stand alone? I was convinced HxN is plugin and need some kind of host. I have even written a tutorial how to use midi to control HxN.

 

Link to comment
Share on other sites

Link to comment
Share on other sites

  • 1 year later...

FYI, if you want to experiment with coding an Arduino based footswitch and would like to avoid building hardware, the Disaster Area Designs DMC 1st gen footswitches are basically an Arduino Nano based device.  You can plug one into a computer, bring up the Arduino IDE and set it to Nano, and program away on the footswitch like it is a Nano.  The custom PCB inside the DMC has the microcontroller and FTDI USB driver identical to the Nano.  I'm currently coding a DMC-6L for a Kemper and AmpliFIre, and will perhaps add a third mode for a Pod XT.   There are other projects out there that custom code the Gen 1 DMCs (at one time Disaster used to encourage this).

 

This might save you some time if you want to give it a shot, the pin assignments for the DMC-6L I have:

 

int SW[6]={2, 3, 4, 5, 6, 7}; //Switch inputs

 

//LED pin assignments:
// LED for switch   Color  D pin  
// --------------     -----  -----
// SW1              Blue   9
// SW2              Yellow 14
// SW3              Green  15
// SW4              Green  16
// SW5              Blue   17
// SW6              Blue   13
// SW6              Red    12
// SW6              Green  11
// NOTE: LED for SW6 is tri-color

 

#define SidePot A5  //Pot installed in side of DMC-6L
#define PotJack A4  //Jack for controller pedal in back of DMC-6L, not factory wired

Link to comment
Share on other sites

  • 8 months later...
On 2/20/2021 at 7:43 AM, dan5150 said:

Has anyone come up with a wiring diagram for one of these yet? Looks like a fun weekend project.

 

There is a wiring diagram on the github page of the "MIDI Muppet HX"

(Probably wouldn't hurt to add a Schottky diode for reverse polarity protection as well - Pesky details...)

 

And yes, it IS a a fun weekend project :) 

Link to comment
Share on other sites

  • 1 month later...

How would you go about changing the midi channel from OMNI to Channel 4. I like the Midi Muppet but I see no way of changing it on that because it emulating the footswitches but I think I could use the PC changes if I could set the channel to 4 as I have quite a few midi pedals and omni just wont work. Im not arduino savy. I can build analog effect pedals all day long but I cant wrap my head around arduino. I have successfully built the Muppet for my guitar player and he loves it, so Thank you for that one. 

Thanks

Matt 

Link to comment
Share on other sites

  • 1 month later...

I'd like to add a 'MIDI In' to this device i.e. to enable an external midi controller generating note data to be merged with the PC changes from this device. The Note and PC data would be mutually exclusive i.e. not occuring at the same time. Hence a simple solution may be ok e.g. buffer the MIDI In with an opto-isolator and connect it directly to MIDI Out along with the Arduino output. Would that work... any thoughts? Thanks, Roy

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...