Arcade Button MIDI Controller by fraganator
Featured

Step 10: Future Enhancements

I hope you've enjoyed creating your own MIDI controller (and my first Instructable)! Please post any suggestions or features you'd like to see in future revisions of the MIDI controller.

There are a number of things I'd like to add and change in future MIDI controllers.

1. Create a simple software/hardware architecture to allow for easily expandable I/O. This would be through the use of additional microcontrollers or dedicated I/O chips.

2. Utilise the LUFA library to make the controller a true USB MIDI controller, and not rely on extra PC software.

3. Update the Arduino sketch to support 14-bit MIDI messages

4. Build a CNC machine for cutting out holes in the enclosure (you may have noticed some of the button holes I made are a bit wonky).
 
Remove these adsRemove these ads by Signing Up
myonus says: Dec 9, 2011. 2:38 PM
Hello,

This is a great source of information helping for my own project im working on. One thing im adding is a series of midi joysicks. As you know the limitations of the Arduino also limits how many knobs, sliders, and switches. If customization are the most important, and cost of parts is irrelivent (as in my case) I am designing my case to house a 10 port USB hub that supplies it own 12v to each USB device so as not to overload motherboard resources. If this can work, potentially I could expand your idea 10X over a single USB port on my tower. Having this will ultimately give me a individual controller similar to yours for each of the 8 - 1/4" TRS analog inputs on my soundcard. And the fancy would be the mini joystick at the top of each channel to use for 5.1 surround sound automation in recording software like Sony Vegas and Sonar. I have also considered to replace the Arduino with a $5 USB gamepad that may take a bit of tweeking to perfect; still I should potentially get 16 channels of midi for each USB device. 10 USB ports X 16 channels midi = 160 channels of midi recognized by the software.

Is my thinking logical or am I way off the rocker with this one????
jmixon says: Aug 28, 2011. 9:57 AM
hi, sweet setup!! gonna build it now and see if i cant get it to work. gonna use my old laptop trackpad for the two sliders since its all i's gots at the moment. lol.

ive been pointed at this library
http://www.arduino.cc/playground/Main/MIDILibrary

and specifically the CALLBACK feature, which my limited understanding tells me is simply a fancy do while type command.

it SHOULD work just fine with the lufa library which i will test should the arduino midi library not work right, as i have used the lufa successfully with a one button one pot setup.
antonmorvolhert says: May 6, 2011. 1:54 PM
By combining the schematics from this library's documentation:
http://ruinwesen.com/mididuino

And this tutorial:
http://shiftmore.blogspot.com/2010/01/quick-and-dirty-arduino-midi-over-usb.html

You can have a functional usb midi device without the use of any kind of software.

The only downside to this setup is that you would need to open the box every time you need to program it but after completing the code this is no longer an issue.
fraganator (author) says: May 9, 2011. 12:19 AM
Arduino UNO users can also upload custom firmware to the on board atmega8u2 chip (normally used for serial<->USB comms). This link has more info: http://hunt.net.nz/users/darran/

Note this won't work with the Arduino clone used in this project (which is based on the Duemilanove).
pgiuliani says: Jun 21, 2011. 11:54 PM
How it would be if you upload the Sketch for this method? If you dont have an Arduino Uno you can send me an Email with the edited Sketch and i will try it for you! =)

Email: giulio_94@hotmail.com
pgiuliani says: Jun 21, 2011. 11:50 PM
Hi ho! I again =)
I have a Arduino UNO R2..
I uploaded the Midifirmware of http://hunt.net.nz/users/darran/ on my Arduino!

The upload was successful and my Windows was showing it as "Arduino MIDI" =)

But i have a Problem. When i want to use it on Traktor, and i use the "Learn" Method for a Potentiometer, it switches on all channels when i turn it! :D So i can't choose my Potentiometer...

I think i have to change the Midi messages (The order or something)... Can you say me how??

DESCRIPTION:

Byte Description
0 Command: E.g. 0x90 Note On, 0x80 Note Off.
1 Channel: 1 to 16
2 MIDI data byte 2. Depends on Command, for 0x80 and 0x90 this is the Pitch values 1-127
3 MIDI data byte 3. Depends on Command, for 0x80 and 0x90 this is the Velocity values 1-127

ACTUAL:

Serial.print(channel, BYTE);
Serial.print(pitch, BYTE);
Serial.print(velocity, BYTE);

NICE TUTORIAL!! =D
pgiuliani says: Jun 22, 2011. 1:40 AM
I have found a solution!

Serial.print(channel, BYTE);
Serial.print(1,BYTE);
Serial.print(pitch, BYTE);
Serial.print(velocity, BYTE);
makaha85 says: Mar 20, 2012. 3:45 PM
Can you please tell me in detail what i have to change?
I don't find this part in the code.
trainables says: Feb 26, 2011. 12:44 AM
How to adapt this for use in non-MIDI applications, like as an arcade controller for MAME or as a custom controller for Blender or DAZ 3D (maybe in conjunction with AutoHotkey)?
trainables says: Feb 26, 2011. 4:34 PM
I might have found the answer. May have to build this project to find out.

http://forum.ableton.com/viewtopic.php?f=1&t=115621&p=1002676#p1002676
fraganator (author) says: Feb 26, 2011. 6:14 PM
I'd probably try setting up an AHK script to talk directly with the Arduino's serial port, rather than going through the serial to midi converter, and then through the midi to AHK script. You could then modify the serial messages the Arduino sends from a 3 byte MIDI message to a single byte so the output it easier to work with. Here's an example serial AHK script.

Another option (and one which I'll pursue in an updated MIDI controller) is to use the LUFA library to directly program the ATMega chip to act as a joystick output device.
mrasmus says: Feb 28, 2011. 3:55 AM
It's important to note that LUFA is for AVR's with hardware USB support -- the main chip on the Arduino does not have this capability (which is why a secondary chip, an FTDI (or more recently, a smaller AVR *running* LUFA) is necessary for the USB Serial communications). I suspect you knew this, but I figured it'd be nice to be clear about it. If you were to want to run as a USB device on a non-HW-USB AVR, you'd need to use a software implementation like V-USB. I'm not too familiar with that project, but it might be possible to use the lower-end AVR's to this effect using it... might be worth exploring.

This is basically the exact same as a half-finished panel I've been working on for a bit, based around an AT90USBKey I've had sitting on my desk for a bit, and running (you guessed it!) LUFA so that it can act as a "true" USB MIDI device.

Great Instructable, gave me a few little ideas to improve on my design.

Oh, and as far as converting the project to run as a controller for MAME, etc., it may be worth looking into the excellent Dual Strike PCB for arcade controllers -- IIRC, it uses the same chip as the Arduino, has open code to peak through, and does a V-USB-style software USB stack (it may actually be V-USB, I don't know) for USB HID-class controlling for PC and PS3 support. Have one in my arcade stick, 'cause I got lazy and just wanted something that worked.
fraganator (author) says: Mar 3, 2011. 7:04 AM
Excellent post mrasmus. That's exactly what I was thinking in terms of using a low end AVR running LUFA as the USB controller. I hope others find the info useful.
Pro

Get More Out of Instructables

Already have an Account?

close

PDF Downloads
As a Pro member, you will gain access to download any Instructable in the PDF format. You also have the ability to customize your PDF download.

Upgrade to Pro today!