loading

MIDI bass pedals, similar to pedals organists use to play bass notes, but instead used to play a MIDI synthesizer or sound module, have been popular for the last few decades. In addition to keyboard players, many electric bass players, such as Geddy Lee of Rush, have used them to expand the palette of bass sounds they use. But they can be quite expensive.

These were my main costs for building a set of bass pedals:

$35 Bass pedals from a Conn organ bought on eBay
$35 Shipping for the bass pedals
$44 Arduino Mega 2650 R3 controller board
$20 Sparkfun MIDI Shield
$7 9V 1000 mA AC adapter for Arduino boards
_______________________________________________

$141 TOTAL

In addition to these I used some miscellaneous stuff like wire, solder, contact cleaner, tie wraps and cables I already had. A good place to to get the Arduino components and the MIDI Shield is the Robot Shop.

Step 1: Get the Bass Pedals

I went on eBay, and literally the cheapest set of bass pedals available looked good to me, partly because it had a strong metal frame. It had been removed from a Conn home organ, and was $35, with an additional $35 required for shipping it. This is what it looked like when it arrived.

There were lots of sets of bass pedals available which had been removed from Hammond M3 organs that would likely have worked just as well, but they were a bit more expensive and didn't have the metal frame.

Step 2: Take Off the Cover and Clean the Contacts

Upon removing the cover, I could see the mechanism. There was a complex set of springs, all badly corroded. In the closeup, you can see the mechanism furthest to the left has had the contact cleaned, while the other two have not. You can see how heavily corroded they were.

This set of bass pedals had multiple switches on each pedal, but for MIDI, we will only be using one switch. We will use the top back and top front contact, so that when the pedal goes down, the spring comes up and touches the front contact.

I used DeoxIT D5 contact cleaner, but I'm sure other contact cleaners would also work. In addition to the contact cleaner, I gently rubbed with the flat part of a slot screwdriver that was coated with contact cleaner. The part that needs to be cleaned consists of the front contact and the part of the spring that touches it.

Step 3: Remove Electronics and Attach Wires

Clip the wires that go to the pedal switches and remove all the other electronics. The switches are the only part of the original pedals we will be using.

Set up the pedal switches so that one side of each switch is connected to a common bus. This will be connected to ground. The other side of each switch should have a separate wire that will go to the controller board. I had multiple colors of wire, so I based the colors of wire I used on the resistor color code as shown above, which helped me keep track of which note was going where.

Step 4: Add the Controller

Next I mounted the controller. It is important that the connections on the bottom of the Arduino Mega controller board not touch metal, so I 3D-printed a "coaster" for it. The STL file for the coaster is attached, but you don't need to 3D print something. Anything that will act as an insulator between the controller board and the metal frame will work well, such as corrugated cardboard.

The Arduino board has several holes in it. I selected two, drilled 1/8" diameter holes in the coaster and the metal frame, and used standard 4-40 machine screws to attach it. I had positioned it carefully so the power jack is flush with the end of the pedals, and the USB connector protrudes slightly.

Then I plugged the Sparkfun MIDI shield onto the Arduino, Make sure to line up the RX and Analog 5 pins on the MIDI Shield so they plug into the RX and Analog 5 pins on the Arduino Mega 2650.

Step 5: Connect Up the Pedal Switches

I plugged a couple of 0.1" header strips into the inner row of sockets on the connector at the end of the Arduino Mega board. I already had them, but if you need to get some, you can order them from Adafruit.

I then soldered the wires from the pedal switches to the header pins. Above is a list of the wires and the digital pin numbers they connect to. The digital pin numbers are silk screened onto the Arduino board next to the connector. Do not solder to the very top pin, as it has +5 volts, and is not a digital pin, and bad things will happen if you short it to ground.

Also, connect the bottom pin, which is ground, to the common bus where one side of each of the pedal switches is connected together. I used a black wire for this one. That's it! You are all wired up!

Note: An earlier version of this step incorrectly showed the low C being connected to pin 49. 48 is the correct pin.

Step 6: Prepare to Program the Controller With a Test Program

You will need a computer to do this. The software you need is free, and is available for Macs, Windows and Linux machines. You can download it at this page: Arduino Software

Once you have the Arduino software installed and launched, extract the Bass Pedal Test program from the attached BassPedalsTest.zip file. In the Arduino software, click the menu File->Open and select the directory named BassPedalsTest, which is what you extracted from the zip file. Click the Open button in the file dialog. At this point, it will look similar to what is shown in the top picture above.

You will also need to get a USB cable, one with an A-type connector (to connect to your computer) and a B-type connector (to connect to the controller), as show in the bottom picture above.

Step 7: Program the Controller With a Test Program

Before proceeding, flip the switch circled in the top photo on the Sparkfun MidiShield to the "PROG" position. It must be in this position for the controller to be programmed.

Use the USB cable indicated in the previous step to connect your computer to the controller. The USB cable will supply power, so you do not need to plug a power supply into the controller at this point.

If you are on a Windows machine, your computer will automatically install a necessary driver for the controller board. If installation fails (as it sometimes does), just unplug the USB cable, wait a few seconds, and plug it in again. The installer will launch again. Macs and Linux machines don't need a driver installation.

With the controller connected (and the driver installed if on Windows), next we will configure the Arduino software. With BassPedalsTest loaded from the previous step, select Tools->Board->"Arduino Mega or Mega 2650". Then select Tools->Port, and pick "Arduino Mega orMega 2650" from the list of ports. The software is now configured to program the controller.

Press the right arrow icon in the top left of the window. The program will compile and then be uploaded to the controller.

Step 8: Test Your Hardware

With the controller still connected and the Arduino software still running, select Tools->Serial Monitor. A new window will appear. If it is not set for 9600 baud at the bottom, change it to 9600 baud. Press the small reset button on the Sparkfun MIDI Shield. A line saying "Setup Complete" should appear on the Serial Monitor.

Press a bass pedal. A message saying "Note On:" followed by the corresponding MIDI note number will appear on the monitor. When you release the bass pedal a message saying "Note Off:" followed by the corresponding MIDI note number will appear on the monitor.

Press each bass pedal in turn, and ensure that the correct note number appears. If the wrong number appears or one of the bass pedals does not produce an output, check your wiring. A list of MIDI note numbers for each pedal is included above.

Step 9: Finish It!

Extract the Bass Pedal Run program from the attached BassPedalsRun.zip file on your computer. Make sure the controller is attached via the USB cable to your computer. Run the Arduino software (if it is not already running). Make sure the RUN/PROG switch on the Sparkfun MIDI Shield is set to the PROG position. Press the small reset button on the MIDI Shield.

In the Arduino software, select File->Open. In the file dialog that appears select the BassPedals1 directory you extracted from the zip file, and click the Open button. A new Arduino software window will appear.

Press the right arrow icon in the upper left of the new window. The real program to run the bass pedals will compile and download onto the controller.

After it completes successfully, unplug the controller from the USB cable. Flip the RUN/PROG switch on the Sparkfun MIDI Shield to the RUN position, and plug the Arduino power supply into the controller. Plug a MIDI cable from the MIDI Out jack on the Sparkfun MIDI Shield to the synthesizer or sound module you want to control. You can now play your bass pedals!

Step 10: Customize It!

Attached is a document describing ways to customize the controller software. You do not need to be a computer geek to do most of them; you just need to make simple edits to the program and re-load the program into the controller.

I made one of these using set of Hammond M100 bass pedals. There are a couple of alterations to get these pedals to work. First you need to disable the latching mechanism and second you need to switch around the HIGH and LOW in this part of the code:<br><br>{<br>&nbsp; &nbsp; &nbsp;if(value == LOW) &nbsp; &nbsp; &nbsp; &nbsp;// Key is now on<br>&nbsp; &nbsp; &nbsp;{<br>&nbsp; &nbsp; &nbsp; &nbsp;noteOn(keys[i].midiKey + keyOffset); &nbsp; &nbsp; &nbsp;// Send the MIDI note on message<br>&nbsp; &nbsp; &nbsp; &nbsp;keys[i].keySent = keys[i].midiKey + keyOffset;<br>&nbsp; &nbsp; &nbsp; &nbsp;keys[i].debounce = DEBOUNCE; &nbsp;// Set the note off debounce counter<br>&nbsp; &nbsp; &nbsp;}<br>&nbsp; &nbsp;}<br>&nbsp; &nbsp;else &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Key has been on<br>&nbsp; &nbsp;{<br>&nbsp; &nbsp; &nbsp;if(value == HIGH) &nbsp; &nbsp; &nbsp; // Key has gone off<br><br><br>With these two things done they work fantastically. I also added a Yamaha MD-BT01 Bluetooth Wireless MIDI Interface for convenience.<br>
<p>Built the pedal and it works great! Just wondering if anyone has come up with an octave selector using the three switches on top of the midi shield? Thing about three separate foot switches that would select keyoffset 0 through keyoffset 2 to select octaves 0-2. New to Arduino so I'm not exactly sure how to pull that off, especially having the three foot switches operate based on last press.</p><p>Thanks for any replies!</p><p>Paul</p>
<p>I've been waiting for this info for months and months</p>
<p>Hi, finally got on the right computer to copy my Arduino code. I nested a loop within the main loop to reduce latency. It actually worked. Here you go:<br><br>#include &lt;arduino2.h&gt;</p><p>#include &lt;pins2_arduino.h&gt;</p><p>/* 4/2/16 this works with no delay</p><p> LiquidCrystal Library - setCursor</p><p>LiquidCrystal declaration:</p><p>LiquidCrystal lcd(RS,Enable,D4,D5,D6,D7)</p><p>The circuit:</p><p>1 Ground</p><p>2 5 Volts (VCC)</p><p>3 Display Contrast (VO) - to 10kohm potentiometer wiper (pin 2)</p><p>4 Register Select (RS) - controls whether writing to data register or instruction register. Command (0) or Character (1). Attached to digital pin (see above).</p><p>5 Read/Write (RW) - Selects reading mode or writing mode. optional, can attach to ground per LiquidCrystal() description on Arduino.cc and Wikipedia. Write (0) or Read (1). Attached to ground.</p><p>6 Enable (E) Attached to digital pin (see above).</p><p>7 Data Bit 0 (Not used in 4-bit operation) Open</p><p>8 Data Bit 1 (Not used in 4-bit operation) Open</p><p>9 Data Bit 2 (Not used in 4-bit operation) Open</p><p>10 Data Bit 3 (Not used in 4-bit operation) Open</p><p>11 Data Bit 4 attached to digital pin (see above)</p><p>12 Data Bit 5 attached to digital pin (see above)</p><p>13 Data Bit 6 attached to digital pin (see above)</p><p>14 Data Bit 7 attached to digital pin (see above)</p><p>15 LED Backlight Anode + to 220ohm resistor to 5 Volt</p><p>16 LED Backlight Cathode - to Ground</p><p>The Pot: (front view?)</p><p> O</p><p>1 2 3</p><p>1 goes to ground</p><p>2 (wiper) goes to VO</p><p>3 goes to 5V</p><p>(hopefully this is not reversed) </p><p> MIDI</p><p> Female output from inside:</p><p> O</p><p>14253</p><p> * MIDI jack pin 4 connected to +5V through 220-ohm resistor</p><p> * MIDI jack pin 2 connected to ground</p><p> * MIDI jack pin 5 to digital in 1 connected </p><p> */</p><p>#include &lt;LiquidCrystal.h&gt;</p><p>//Pedals: Low C through High C</p><p>#define SWITCH1 30</p><p>#define SWITCH2 31</p><p>#define SWITCH3 32</p><p>#define SWITCH4 33</p><p>#define SWITCH5 34</p><p>#define SWITCH6 35</p><p>#define SWITCH7 36</p><p>#define SWITCH8 37</p><p>#define SWITCH9 38</p><p>#define SWITCH10 39</p><p>#define SWITCH11 40</p><p>#define SWITCH12 41</p><p>#define SWITCH13 42</p><p>#define PEDALBOUNCE 20</p><p>//Buttons will be: Select_Panic, SELECT_RIGHT, SELECT_UP, SELECT_DOWN</p><p>#define Select_Panic A0</p><p>#define Select_Right A1</p><p>#define Select_Up A2</p><p>#define Select_Down A3</p><p>#define BUTTONBOUNCE 300</p><p>int Buttons[17] = {SWITCH1, SWITCH2, SWITCH3, SWITCH4, SWITCH5, SWITCH6, SWITCH7, SWITCH8, SWITCH9, SWITCH10, SWITCH11, SWITCH12, SWITCH13, Select_Panic, Select_Right, Select_Up, Select_Down};</p><p>int ButtonState[17] = {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH};</p><p>int currentButton = 0;</p><p>int currentButtonState;</p><p>int TriggeredNote[13] = {36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48};</p><p>unsigned long stopTime;</p><p>boolean breakLoop;</p><p>//string arrays</p><p>const String LCDNoteName[12] = {&quot;C &quot;, &quot;C#&quot;, &quot;D &quot;, &quot;D#&quot;, &quot;E &quot;, &quot;F &quot;, &quot;F#&quot;, &quot;G &quot;, &quot;G#&quot;, &quot;A &quot;, &quot;A#&quot;, &quot;B &quot;};</p><p>const String LCDNoteOctave[11] = {&quot; 0&quot;, &quot;1 &quot;, &quot;2 &quot;, &quot;3 &quot;, &quot;4 &quot;, &quot;5 &quot;, &quot;6 &quot;, &quot;7 &quot;, &quot;8 &quot;, &quot;9 &quot;, &quot;10&quot;};</p><p>//LCD Initial Values: Volume - 0-127, Program - 0-127, Channel - 1-16, LowNote - 000(C0)-127(GC10)</p><p>byte Volume = 100;</p><p>byte Program = 0;</p><p>byte Channel = 0;</p><p>byte LowNote = 24; //C2</p><p>byte LowNoteName = 0; //C or LowNote%12</p><p>byte LowNoteOctave = 2; //Octave 2 or LowNote/12</p><p>// LCD dimensions</p><p>const int numRows = 2;</p><p>const int numCols = 16;</p><p>//Cursor Position: 1-Volume 2-Program 3-Channel 4-Low Note</p><p>int CursorPosition = 1;</p><p>// initialize the LCD library with the numbers of the interface pins</p><p>LiquidCrystal lcd(14,15,16,17,18,19);</p><p>void Right() {</p><p> switch (CursorPosition) {</p><p> case 1:</p><p> lcd.setCursor(4, 1);</p><p> CursorPosition = 2;</p><p> break;</p><p> case 2:</p><p> lcd.setCursor(8, 1);</p><p> CursorPosition = 3;</p><p> break;</p><p> case 3:</p><p> lcd.setCursor(12, 1);</p><p> CursorPosition = 4;</p><p> break;</p><p> case 4:</p><p> lcd.setCursor(0, 1);</p><p> CursorPosition = 1;</p><p> break;</p><p> }</p><p>}</p><p>void Up() {</p><p> switch (CursorPosition) {</p><p> case 1:</p><p> if (Volume &lt; 127)</p><p> Volume += 1;</p><p> if (Volume &lt; 10) {</p><p> lcd.print(&quot;00&quot;);</p><p> }</p><p> else {</p><p> if (Volume &lt; 100) {</p><p> lcd.print(&quot;0&quot;);</p><p> }</p><p> }</p><p> lcd.print(Volume, DEC);</p><p> lcd.setCursor(0, 1);</p><p> break;</p><p> case 2:</p><p> if (Program &lt; 127)</p><p> Program += 1;</p><p> if (Program &lt; 10) {</p><p> lcd.print(&quot;00&quot;);</p><p> }</p><p> else {</p><p> if (Program &lt; 100) {</p><p> lcd.print(&quot;0&quot;);</p><p> }</p><p> }</p><p> lcd.print(Program, DEC);</p><p> lcd.setCursor(4, 1);</p><p> Serial.write(0xc0 + Channel);</p><p> Serial.write(Program);</p><p> break;</p><p> case 3:</p><p> if (Channel &lt; 15)</p><p> Channel += 1;</p><p> lcd.print(&quot;0&quot;);</p><p> if (Channel &lt; 9) {</p><p> lcd.print(&quot;0&quot;);</p><p> }</p><p> lcd.print(Channel + 1, DEC);</p><p> lcd.setCursor(8, 1);</p><p> break;</p><p> case 4:</p><p> if (LowNote &lt; 127)</p><p> LowNote += 1;</p><p> for (int Counter = 0; Counter &lt;= 13; Counter++) {</p><p> TriggeredNote[Counter]++;</p><p> }</p><p> LowNoteName = LowNote % 12;</p><p> LowNoteOctave = LowNote / 12;</p><p> lcd.print (LCDNoteName[LowNoteName] + LCDNoteOctave[LowNoteOctave]);</p><p> lcd.setCursor(12, 1);</p><p> break;</p><p> }</p><p>}</p><p>void Down() {</p><p> switch (CursorPosition) {</p><p> case 1:</p><p> if (Volume &gt; 0)</p><p> Volume -= 1;</p><p> if (Volume &lt; 10) {</p><p> lcd.print(&quot;00&quot;);</p><p> }</p><p> else {</p><p> if (Volume &lt; 100) {</p><p> lcd.print(&quot;0&quot;);</p><p> }</p><p> }</p><p> lcd.print(Volume, DEC);</p><p> lcd.setCursor(0, 1);</p><p> break;</p><p> case 2:</p><p> if (Program &gt; 0)</p><p> Program -= 1;</p><p> if (Program &lt; 10) {</p><p> lcd.print(&quot;00&quot;);</p><p> }</p><p> else {</p><p> if (Program &lt; 100) {</p><p> lcd.print(&quot;0&quot;);</p><p> }</p><p> }</p><p> lcd.print(Program, DEC);</p><p> lcd.setCursor(4, 1);</p><p> Serial.write(0xc0 + Channel);</p><p> Serial.write(Program);</p><p> break;</p><p> case 3:</p><p> if (Channel &gt; 0)</p><p> Channel -= 1;</p><p> lcd.print(&quot;0&quot;);</p><p> if (Channel &lt; 9) {</p><p> lcd.print(&quot;0&quot;);</p><p> }</p><p> lcd.print(Channel + 1, DEC);</p><p> lcd.setCursor(8, 1);</p><p> break;</p><p> case 4:</p><p> if (LowNote &gt; 0)</p><p> LowNote -= 1;</p><p> for (int Counter = 0; Counter &lt;= 13; Counter++) {</p><p> TriggeredNote[Counter]--;</p><p> }</p><p> LowNoteName = LowNote % 12;</p><p> LowNoteOctave = LowNote / 12;</p><p> lcd.print (LCDNoteName[LowNoteName] + LCDNoteOctave[LowNoteOctave]);</p><p> lcd.setCursor(12, 1);</p><p> break;</p><p> }</p><p>}</p><p>void Panic()</p><p>{ for (int Counter = 0; Counter &lt;= 15; Counter++) {</p><p> Serial.write(176 + Counter);</p><p> Serial.write(123);</p><p> Serial.write(0);</p><p> }</p><p>}</p><p>void noteOn(int cmd, int pitch, int velocity) {</p><p> Serial.write(cmd);</p><p> Serial.write(pitch);</p><p> Serial.write(velocity);</p><p>}</p><p>void setup() {</p><p> // Set MIDI baud rate:</p><p> Serial.begin(31250);</p><p> // set up the LCD's number of columns and rows:</p><p> lcd.begin(numCols, numRows);</p><p> lcd.setCursor(0, 0);</p><p> lcd.print(&quot;VOL PRG CHN LOW&quot;);</p><p> lcd.setCursor(0, 1);</p><p> lcd.print(&quot;100 000 001 C 2&quot;);</p><p> lcd.setCursor(0, 1);</p><p> lcd.cursor();</p><p> //set up buttons</p><p> for ( currentButton = 0; currentButton &lt; 17; currentButton++ ) {</p><p> pinMode2( Buttons[currentButton], INPUT ); // Set pin for switch</p><p> digitalWrite2( Buttons[currentButton], HIGH ); // Turn on internal pullup</p><p> }</p><p>}</p><p>void loop() {</p><p> while (true) {</p><p> breakLoop = false;</p><p> while (breakLoop == false) {</p><p> for ( currentButton = 0; currentButton &lt; 17; currentButton++ ) {</p><p> currentButtonState = digitalRead2(Buttons[currentButton]);</p><p> if (currentButton &lt; 13) {</p><p> {</p><p> if (currentButtonState != ButtonState[currentButton] ) {</p><p> if ( ButtonState[currentButton] == LOW ) {</p><p> noteOn(0x80 + Channel, TriggeredNote[currentButton], 0x00);</p><p> ButtonState[currentButton] = HIGH;</p><p> }</p><p> else</p><p> { noteOn(0x90 + Channel, TriggeredNote[currentButton], Volume);</p><p> ButtonState[currentButton] = LOW;</p><p> }</p><p> stopTime = millis() + PEDALBOUNCE;</p><p> while (millis() &lt; stopTime) {};</p><p> }</p><p> }</p><p> if (currentButton == 13 &amp;&amp; currentButtonState == LOW) {</p><p> Panic();</p><p> stopTime = millis() + BUTTONBOUNCE;</p><p> while (millis() &lt; stopTime) {};</p><p> }</p><p> if (currentButton &gt; 13 &amp;&amp; currentButtonState == LOW) {</p><p> breakLoop = true;</p><p> stopTime = millis() + BUTTONBOUNCE;</p><p> while (millis() &lt; stopTime) {};</p><p> }</p><p> }</p><p> }</p><p> breakLoop = false;</p><p> while (breakLoop == false) {</p><p> for ( currentButton = 0; currentButton &lt; 17; currentButton++ ) {</p><p> currentButtonState = digitalRead2(Buttons[currentButton]);</p><p> if (currentButton &lt; 13 &amp;&amp; currentButtonState == LOW) {</p><p> breakLoop = true;</p><p> stopTime = millis() + PEDALBOUNCE;</p><p> while (millis() &lt; stopTime) {};</p><p> }</p><p> if (currentButton == 13 &amp;&amp; currentButtonState == LOW) {</p><p> Panic();</p><p> stopTime = millis() + BUTTONBOUNCE;</p><p> while (millis() &lt; stopTime) {};</p><p> }</p><p> if (currentButton == 14 &amp;&amp; currentButtonState == LOW) {</p><p> Right();</p><p> stopTime = millis() + BUTTONBOUNCE;</p><p> while (millis() &lt; stopTime) {};</p><p> }</p><p> if (currentButton == 15 &amp;&amp; currentButtonState == LOW) {</p><p> Up();</p><p> stopTime = millis() + BUTTONBOUNCE;</p><p> while (millis() &lt; stopTime) {};</p><p> }</p><p> if (currentButton == 16 &amp;&amp; currentButtonState == LOW) {</p><p> Down();</p><p> stopTime = millis() + BUTTONBOUNCE;</p><p> while (millis() &lt; stopTime) {};</p><p> }</p><p> }</p><p> }</p><p> }</p><p> }</p><p>}</p>
<p>I'm pretty new to all this stuff, but would this entire code replace the BassPedals file that was included with this post? and what exactly is it adding with regards to the buttons? you only mention the Latency improvement.</p>
<p>This is all the code I use. The features:</p><p>LCD - displays values for Volume, program number (least useful), MIDI transmit channel and the note assigned to the lowest pedal. Scroll button - scrolls LCD cursor through four parameters, Up and Down buttons - adjust four parameters, Panic Button - silences stuck notes (very useful). </p>
<p>so any chance you know how to add programming for the buttons to provide Octave Up/Down?</p>
<p>so nobody has re-written the code to include octave buttons? or useful uses for the potentiometers?</p>
<p>Is it possible to use this interface utilizing the USB instead of MIDI? I want to avoid using MIDI if possible.</p>
<p>https://www.arduino.cc/en/Reference/MIDIUSB</p>
<p>Hey Vanceg,</p><p>first of all thanks for the instructable! Just uploaded your .ino file and and getting a strange reading: All of my keys are reading as low c or note 24. I did a couple of things that may have caused this but would like your advice. First of all I shorted the top pin (5v) to ground exactly as you said NOT to do... Secondly i may have purchased the wrong Arduino to begin with. I purchased the Mega ADK rather than the 2650 by accident. I was hoping to have the pedal keys speak to a sampler via USB rather than through a midi shield and the ADK has a USB A connection but i dont know if that would even make a difference. </p><p>Thank you ahead of time for telling me whether or not i have fried my board,or if i have done something else wrong</p><p>David L</p>
<p>cool!</p>
<p>Thank you for the nice work. It would be nice to know a couple of other ways to customize the programming and wiring:</p><p>1. Octave Up/Down buttons</p><p>2. MIDI channel Up/Down buttons</p><p>3. LED/LCD display of MIDI channel, Octave</p>
<p>did you ever get this information? </p>
<p>Sorry to be slow. I ended up figuring it out myself (I was a programmer briefly in a former life). At some point as I was adding features, the latency delay between stepping on the pedal and hearing the note was too long to be useful, so I had to find my way around that as well. If this is still of interest, let me know and I'll post the current version of my code somewhere.</p>
<p>Yes, I would love this please. Can it be assigned to any unused pins? or do you have it assigned to the buttons on the board? I actually have the board hidden inside my pedals. Only the midi ports are accessible, but If I have to, I can change that.</p>
<p>did anybody ever get you info on this?</p>
<p>does anybody have input on how exactly the sparkfun get's connected to the Arduino? I got part of it from these steps, but it's not clear on all of it, just mentions the 5 pins and the RX, that's all?</p>
<p>I saved a lot by just using a MIDI female jack (many configurations for cheap on ebay). In fact, I tried it for free first by cutting the bad end off of an old MIDI cable. You hook it to the ground, 5V and the transmit jack on the Arduino. An app to test this is built into the Arduino suite of test programs. I tried that before I moved on to this project. Also, I save a lot by getting my knock-off MEGA from MicroCenter for $10.00 (!!!). </p><p>An added benefit of buying several connections on the cheap is that you can use the extras for other projects, or to rebuild your project using lessons learned during the first attempt.</p>
<p>Hey, thanks for the tips. </p><p>I want to notice you that the CustumizingBassPedalSoftware.pdf file is not recognize as a pdf by my computer. It says it is some sort of binary file. How can I get it?</p><p>And i'd like to know how to program a volume pedal on the arduino.</p>

About This Instructable

18,624views

72favorites

License:

Bio: If you enjoyed some of my projects, please take a moment an listen to some of Gekko Projekt's music. I play keyboards and write ... More »
More by vanceg:DIY 6-Button Silicone Rubber Keypad Cell Phone Bike Cradle for Galaxy S Series Stop Making Fuzzy 3D Prints! 
Add instructable to: