MIDI Foot Controller

Hi there,

I am fairly new to the arduino and have tested a few simple programs out with leds, sending midi notes etc.

However i am wanting to make a foot controller that sends program changes for my rack gear and not sure how to
go about it as there's quite abit of code on the internet but nothing thats fairly simple and stands out with program changes.

I want 10 switches to send program changes (0-127) with 10 banks (0-9 up/down).

I kinda know what i am after but not sure how to go about it?

Regards

Man, talk about timing, I was putting in my post about something similar when you posted this :wink:

Sounds like you're trying to do something along the lines of a Voodoo Labs Ground Control Pro, is that correct? Do you have anything drawn up or coded yet? We might be working along the same lines in some areas.

nice, yeah that kind of thing but i want it for midi program changes for my ADA MP1. I haven't written anything up yet, just browsing
other peoples code and trying to make sense of it.

Like I said in my thread, I had trouble finding examples for MIDI decoding but while searching found a ton of projects that send MIDI data out. Let me know if you have trouble finding what you need and I'll go back through the myriad of links I saved and post the relevant ones here for you.

I was tempted to do this myself although I couldn't figure out a way to make it programmable without connecting it to a computer. However, I only gave it a few minutes of thought since I already have a GCP. Although, I must admit, I would be kind of cool to build one and then sell the GCP to fund other projects 8).

Have you decided how you want it to work? If you're using it only for the MP1 and don't mind having to adjust the code to make changes, it shouldn't be that difficult. Just make sure you shop around for your switches since they can get expensive and vary widely in price.

If you have something that sends MIDI note on messages it is easy to modify it for program change.
A program change message is just two bytes long not three.
The first byte is:-
1100nnnn
or 0xC0 + the MIDI channel
the second byte is:-
0ppppppp
with the most significant bit being zero and the other bits being the is the new program number.

I don't want to stop you in your project, sounds interesting. But I hacked an old Roland FC-100 mkII foot controller and I got 8 foot switches and 8 banks, sending already seted midi messages (the hack consists in changing the output cable for a midi cable). It also has some more functions. Maybe you are looking fully do it yourself, in that case ignore my advise. Good luck!

http://music-electronics-forum.com/t2932/ (Roland FC-100 hack)

cheers for the info.

I dont really want to hack anything but do the majority from scratch, even thought it will be tough.
i have a roland/edirol midi keyboard and behringer fcb1010, keyboard will do notes and behringer will
do all but i have problems with trying to set the foot controller how i want it which i why i want to make
my own and have it programmed for program changes and not notes.

i know program change is always C0 then the data byte is the program change 01-128 or 00-127 depending how the gear is setup for.

Status Data Byte(s)
D7----D0 D7----D0

(BIN) 1100 XXXX
(HEX) C0 00-0F or 01-0F

So for banks 0-10 will be

(1-10)
bank 0 - 01-0A

(11-20)
bank 1 - 0B-14........etc.

Its just getting 1 to 10 switches to send the program change message down TX
and then have 2 switches for bank up and down to flick the next set/decade of hex numbers

if any of that makes sense. i am not sure how to go about that

i know program change is always C0

Only for MIDI channel 1
for MIDI channel 2 it is C1
for MIDI channel 3 it is C2
for MIDI channel 4 it is C3
and so on.

Its just getting 1 to 10 switches to send the program change message down TX

So get that going first.
Just detect when the button is pressed for the first time, using an if statement to test both the current state of the switch and the previous state, then send the data using Serial.write().

Grumpy_Mike:

i know program change is always C0

Only for MIDI channel 1
for MIDI channel 2 it is C1
for MIDI channel 3 it is C2
for MIDI channel 4 it is C3
and so on.

Its just getting 1 to 10 switches to send the program change message down TX

So get that going first.
Just detect when the button is pressed for the first time, using an if statement to test both the current state of the switch and the previous state, then send the data using Serial.write().

oh, i dont remember reading that C0 changes when the channel is changed. i take it, thats so the device knows the channel has been changed and theres no conflict between program change
messages etc.

I have messed around with the debounce switching that toggles the led, is there any code that will help with
multiple switches toggling multiple leds as a test before sending hex code serially?

like 4 pins for 4 switches

and 4 pins for 4 leds?

Need to get in to the swing of programming again as its been sometime

Just add a:-

delay(25);

After you detect a state change in the switch.