EG-101 / MC-303 Control Panel

Arduino-based touch-screen panel to control Roland EG-101 or MC-303

Similar projects worth following
The "Groove Buddy" is a touch-screen control panel based on Arduino + Gameduino2, which allows you to access functions in the EG-101 and MC-303 which are inaccessible from the front panel of these synthesizers.

The Gameduino 2 shield is plugged into the Arduino Uno R3.

A simple MIDI OUT circuit is created by connecting Arduino pin 3, 4 and GND to a female MIDI DIN socket via a 330 Ohm resistor.

 The software "sketch" running on the Arduino displays a user interface on the Gameduino 2 touch screen, and touch input from the touchscreen is converted to MIDI commands which are sent to the attached synthesizer via the MIDI interface.

The system is powered through the Arduino's 5V USB connection, or can be powered via the Arduino VIn socket (7 to 12V).

Pics: all the different screens, MIDI connection circuit, link to video.

Main screen:

Patch select screen:

Reverb screen:

Chorus screen:

Modulator screen:

"Synth" screen:

  • 1 × Arduino Uno R3
  • 1 × Gameduino 2 touchscreen display
  • 1 × MIDI 5-pin DIN socket
  • 1 × 330 Ohm resistor
  • 1 × PVC project box (approx 100mm x 150mm x 50mm)

View all 6 components

View all instructions

Enjoy this project?



James wrote 05/03/2015 at 12:37 point

OK I managed to compile it in 1.6.0:

1. Install the latest version of Gameduino 2 libraries (I used the "Manual" part of this guide: )

2. Start up (or restart) the Arduino IDE

3. In patches.h, replace "PROGMEM PATCHINFO patchInfo[440] = {" with "const PATCHINFO PROGMEM patchInfo[440] = {"

The EG-101 sketch should now compile.

Hope this works for you :)

  Are you sure? yes | no

samuel.cusumano wrote 05/03/2015 at 15:21 point

Oh gosh, it was an arduino ide version issue!  That's my fault for playing with a new Yun in 1.6.3 (the yun rocks so far btw).

Thank you James, i'll get it running and share some pics of the mods.  I also want to add some menus to control the bend matrix. i need to do some more research into gameduino to see how to modify/wrap to use with my crappy 3.2 tft.

  Are you sure? yes | no

James wrote 05/03/2015 at 16:25 point

As far as I know the GD2 library only works with the GD2 shield, which has it's own touchscreen.

  Are you sure? yes | no

James wrote 05/03/2015 at 12:01 point

I last compiled it back when Arduino SDK 1.0.5-r2 was the latest. Seems since then the SDK/API has changed a bit, if I try now with 1.6.0, it does not compile. (But does compile with 1.0.5).

I'm pretty sure it's a common issue and there will be a fix somewhere in the Arduino forums.

  Are you sure? yes | no

samuel.cusumano wrote 05/01/2015 at 13:56 point

Many thanks for sharing this on github james!  yes your method is how i was thinking about implementing the serialwrites, the set RPN to NULL at the end is a good thing to know. I hope to post some images of my 303 build once she's zipped up. (just waiting on a dual potentiometer from mouser to replace a sadly damaged volume knob)

  Are you sure? yes | no

James wrote 05/03/2015 at 12:39 point

Looking forward to seeing your project working.

  Are you sure? yes | no

samuel.cusumano wrote 04/28/2015 at 19:57 point

James, this looks like you are sending NRPN from the arduino, any chance i can get a link to the codebase?  i'm modifying my old 303 (IC3 pins 4,5,10,11,32,33,34,36,43,44) and i am looking to integrate a mega/touchscreen combo for controlling parameters and a 'bends' crosspoint matrix.  

  Are you sure? yes | no

James wrote 05/01/2015 at 12:34 point

Hi Samuel

I have uploaded my code for this project to github:

Here is the relevant part of the source code for sending NRPN changes (please note that this code sort of works for me, but may not even be correct):

//  Sends a MIDI NRPN change
void midiNRPN(byte channel, byte msb, byte lsb, byte value)
  midiSerial.write(0xB0 | channel);
  //midiSerial.write(0xB0 | channel);
  //midiSerial.write(0xB0 | channel);
  // Set RPN to null so that further spuriuous controller messages are ignored

Cheers - James

  Are you sure? yes | no

samuel.cusumano wrote 05/02/2015 at 16:45 point

 I am hoping to use the GD2 library with my 2560 and touch/tft.  I'm having trouble getting the patches.h  PATCHINFO struct to compile, i'm messing with how PROGMEM is used .  it wants PATCHINFO patchInfo[440] to be const, and then i'm having trouble with the char name[14] requiring initialization ... have you seen anything like this in your compiling?  You have put so much work into building out the menu structure, i want to try and get it working.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates