MIDI Pod-Pal

1,244

3

14

Introduction: MIDI Pod-Pal

About: Electronics tech, musician, frustrated computer user!

***UPDATE 4/22/'21***

*** I have added a full schematic showing all of the wiring to aid in construction.***

I won't go into a ridiculous amount of depth here on the build part, my intention was to show another example of building an Arduino based MIDI controller if you are researching the topic or thinking about building something and gathering ideas. My application is fairly specific for the Line 6 Pod 2.0, but with some code tweaking can be made more broadly applicable.
There are several guitar effects processors with MIDI capability that arrange their presets in banks of 4. I play guitar in a contemporary worship service. The church owns a Line 6 Pod 2.0 modelling processor that sits on the floor and has no foot switches to change presets or pedal to control volume. There are several existing controllers on the market. The Behringer FCB1010 is a great solution for about $150 but takes up more stage floor space than I would prefer. And besides, what fun is that? I knew I had to try and build one. And... I managed to succeed!

Step 1: Basic Hardware Info

Chassis: I "re-purposed" a "ZvBox 160" HDMI modulator that was shot. Nice sturdy steel construction, should survive the zombie apocalypse. Gutted it, laid out the parts, made measurements. I then created a combination drill template/front panel label in Photoshop. I printed the label on a full page adhesive sheet and added an adhesive laminated sheet overlay. See the midi_con_faceplate.psd. Box dimensions are 1.7" H x 10.5" W x 4.75" D (4.32 cm H x 26.67 cm W x 12.07 cm D)

Controller: Arduino Mega 2560 clone made by Sainsmart.

Display: Kingbright model DC08-11SRWA. I mounted it and the 220 ohm resistors needed on a small perfboard that also provided a way to mount in to the chassis.

Foot Switches: what I had laying around. SPST momentary, normally open. guitarpedalparts.com has 'em for $3.

LEDs: I had some bi-color Green and Blinking Red LEDs that I can no longer identify where they came from, but any 3 pin common cathode bi-color LED will work.

Assign switches: small SPDT, action is ON-OFF-(ON). Mouser part # 611-7107-001.

Output jack: Rean NYS2122 TS 1/4".

Pedal: passive 10k linear taper pot type. I used the Line 6 EX 1; M Audio EX-P and Roland EV-5 supposedly will also work. See the image for the pedal circuit schematic detail.

Resistors: 10K for pull-up on switches(QTY: 8); 220 Ohm for MIDI jack (I used 2, one may suffice); 220 Ohm for preset channel LEDs(QTY 8); 220 Ohm for the Kingsbright display (QTY: 8); 2.2K for expression pedal jack (QTY: 1).

Chassis mount DC jack. Mouser part # 502-712A.

UPDATE: I've included a full schematic jpg image for wiring reference.

Step 2: ​Features/behavior:

Foot switches labelled "A" through "D" select the 4 presets within a bank. The other 2 foot switches increase and decrease the Bank number. When changing banks, the last used preset button's corresponding LED illuminates with the alternate color until you either select a preset on the new bank, or return to the original bank.

2 momentary toggle switches allow user to assign MIDI channel and continuous controller (CC) numbers. Only CC 1, 2, 4 and 7 can be selected (setup in the Arduino code, but can be expanded) but they are the most commonly used ones. There are 9 banks on the POD 2.0, the controller accesses all 9 but also include a special bank 10. 10-A toggles the tuner on and off, 10-B selects wah mode for the pedal. Either 10-C or10-D will turn off wah and revert back to the user assigned CC number.

The default is CC7 for volume. The LED display shows current bank number, and momentarily show MIDI channel and CC numbers when assigned.

Step 3: The Code:

Here's the code. I've attempted to keep it organized and included plenty of comments. Please use, reuse, abuse or confuse as needed.

You will need to include the MIDI library from FortySevenEffects at github.com.

Step 4: That's It!

Please feel free to contact me if you have any questions. I'm no code guru, but I'd be glad to offer suggestions or ideas.

Be the First to Share

    Recommendations

    • Space Contest

      Space Contest
    • Soup & Stew Speed Challenge

      Soup & Stew Speed Challenge
    • Lamps and Lighting Contest

      Lamps and Lighting Contest

    14 Comments

    0
    markmagic
    markmagic

    8 months ago

    do u have the schematic sir? i love to try this but i dont know how to connect those wires

    0
    ArtieJ
    ArtieJ

    Reply 8 months ago

    My original hand written schematic went missing. I donated the unit to our church. My intention was to retrieve the unit from them and manually draw out a schematic and post here to finalize the project information, but because of Covid 19 we are currently not attending/participating.
    I hope in a few weeks or a couple of months I can get to it .

    0
    markmagic
    markmagic

    Reply 8 months ago

    ok bro ill wait for it, in god's time... thank u

    0
    ArtieJ
    ArtieJ

    Reply 5 months ago

    The schematic is done, thanks for your patience.

    0
    markmagic
    markmagic

    Reply 4 months ago

    thank u so much bro...

    0
    rg370bmw1
    rg370bmw1

    1 year ago

    im a newbie in arduino build. could i get some schematic of this project, especially for the arduino pin header connection. thank you

    0
    ArtieJ
    ArtieJ

    Reply 1 year ago

    I did this about 2 years ago. I will look to see if I have enough notes to generate a schematic, I should have done it when I published this. At this point I can't guarantee it, I'm busy with full time work. Thanks for your interest in it.

    0
    ArtieJ
    ArtieJ

    Reply 5 months ago

    The schematic is finally up! Thanks for your patience, I hope it can still be of some use.

    0
    fadli83
    fadli83

    1 year ago

    can use for effect zoom g21u , thank

    0
    JuniorI5
    JuniorI5

    Question 2 years ago on Introduction

    todo esto esta listo para cargarlo en el arduino y implementar?

    0
    Pedro HenriqueS5
    Pedro HenriqueS5

    Question 3 years ago

    ArtieJ my code is quite simple, I make using Att85/Digispark AT85, here my code, I'm going back to desk to add the new code. Thanks

    //Arduino IDE Code for sending up/down MIDI signals to a Line 6 POD 2.0 with an ATTiny85

    //tested but offered 'as is' without support

    //SoftSerial instead SoftwareSerial only if using Digispark

    #include <SoftSerial.h> //Microcontroller is an ATiny85 so using the SoftwareSerial library

    SoftSerial mySerial(2,3); //RX =2, TX = ATTiny85 pin 2, PB3; MIDI transmit pin

    byte status_byte = B11000000; //Status number 192 for program\bank change, hex = C0

    byte count_val = 38; // Set a start variable at 38 to avoid 'rollover' error when moving down\up patches

    // MIDI send function

    void send_byte(byte value) {

    byte patch_value = value % 37; // Set patch_value= 0 to 36 (0 is manual)

    // Re: Rollover, Byte type is unsigned, Binary 0 minus 1 is B11111111(255), and 255 mod 37 is 33. Hence the following count value reset

    if(patch_value == 1) count_val = 38; //reset count_val to avoid rollover error

    mySerial.write(status_byte); //send status byte

    mySerial.write(patch_value); //send patch value byte

    delay(500); //wait (simple debounce and pause)

    }

    void setup() {

    DDRB = B00001000; //Set PortB direction, in on PB0 and PB1 out on PB3

    PORTB = B00000011; //Switch on internal pull up resistors

    mySerial.begin(31250); //set MIDI baud rate (NB: Microcontroller fuses set to 8Mhz internal clock)

    send_byte(count_val); //Send an initial start value, = Patch A1

    }

    void loop() {

    byte readpins = PINB | B11111100; //read pins once per loop, unpressed switch with pullups = 1 so bitmask applied to unused bits will always TRUE

    if (~readpins){ //Switches have pull-ups, ~readpins will return TRUE when one is pushed

    byte switch_val=~readpins; //inverse of inputs

    switch (switch_val) {

    case B01: //Switch PB0 on

    {count_val-- ;

    send_byte(count_val);}

    break;

    case B10: //Switch PB1 on

    {count_val++ ;

    send_byte(count_val);}

    break;

    }}}

    0
    Pedro HenriqueS5
    Pedro HenriqueS5

    Question 3 years ago

    One doubt, how I can map the button TAP code in MIDI, I make one simple version of your MIDI, for up/down buttons starting in A1 <-> A2... and I 'd like add other controls like TAP and tunner. Thanks

    0
    ArtieJ
    ArtieJ

    Answer 3 years ago

    The Line 6 MIDI CC reference chart says Tap button is CC 64, with values 64 - 127 = a Tap.
    So you could just add a new momentary switch and define an input for button use, call it btnTAP, then send a MIDI CC message for the tap command. So to my sketch you would add something like:

    if (digitalRead(btnTAP) == HIGH{
    // check button state
    delay(10); // software de-bounce
    if (digitalRead(btnTAP) == HIGH{
    midiOut.sendControlChange(64, 127, midiChan);
    }
    }

    You can do similar for the tuner, use CC 69 with 0 for off and 127 for on.

    The PC (Program Change, not Control Change) number 37 will also enable tuner mode, something I discovered by accident.