A few years ago I found MIDI Fighter. MIDI controller with arcade buttons instead of traditional pads. Great idea. In the beginning, it was a DIY solution and that was also my inspiration. Arcade buttons are perfect for finger drumming or, my case, for Cue Points control (with multi-colored LEDs it's a perfect solution) in any DJ software (like NI TRAKTOR or Mixxx). Great idea of how to extend my DJ setup.

  1. Functionality
  2. Design
  3. Hardware
  4. Firmware
  5. Downloads

Functionality

4x4 matrix Arcade buttons keypad:

dyi arcade buttons usb midi controller detailed view

Matrix of 4x4 arcade buttons has a pretty simple function. Sending Note On message when button is pressed and Note Off message when the button is released. The number of the note key depends on the button and also on the bank selection. For the Note key, MIDI protocol allows 128 values (0-127) what is given by 7 bits of 2nd DATA byte of MIDI protocol, 1st bit determines if the Byte is Status or Data type. With 16 buttons it's 8 bank possibility (16 * 8). Along with the note key MIDI message contains also information about channel (there is 16 MIDI channel according to the specification). MIDI channel is determined by 4 bits of 1s Byte.

 

Here is an extract from MIDI specification from midi.org website.

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

Channel Voice Messages [nnnn = 0-15 (MIDI Channel Number 1-16)] 
1000nnnn 0kkkkkkk
0vvvvvvv
Note Off event.
This message is sent when a note is released (ended). (kkkkkkk) is the key (note) number. (vvvvvvv) is the velocity.
1001nnnn 0kkkkkkk
0vvvvvvv
Note On event.
This message is sent when a note is depressed (start). (kkkkkkk) is the key (note) number. (vvvvvvv) is the velocity.

 

4 tactile buttons for settings:

 

dyi arcade buttons midi controller system buttons in detail with letter marks

 

B1 - Bank change

B1 - Channel change

B3 - Reserve (at this moment, firmware v 1.0.1)

B4 - Select Color (of pressed button)

 

Design

For PCBs design of the mainboard and the system buttons board were used Eagle CAD v.9. The overall design is made in Sketchup with "eagleup" plugin for export and import eagle boards to the Sketchup.

dyi arcade buttons midi controller entire design sketchup export

Hardware

Main-Board

For logic and processing of all signals and MIDI data& communication with the computer is responsible 8-bit mid-range family micro-controller PIC18F4550 with USB connection ability. Main-board consists of the micro-controller and two 8-bit static shift registers (4021) for the processing of the buttons signals, the LEDs (SK9822 in serial connection) and holders (modified plug springs for PCb installation) for arcade buttons.

dyi arcade buttons midi controller main board pcb in detail

Plug spring for installation to PCB (has to be cut out one leg for better fit into the mainboard PCB)

dyi arcade buttons midi controller plug spring holders for arcade buttons on the main board

All schematics are available in the download section.

System Buttons Board

is very simple. Just 4 tactile buttons with pullup resistors and connector.

dyi arcade buttons midi controller buttons board pcb

Connection with mainboard is established by standard 6-wire ribbon cable through 6-pin IDC connectors.

dyi arcade buttons midi controller ribbon cable nad odc 6 pin connector

Arcade Buttons

Used buttons are OEM 30mm transparent push buttons as a replacement for Arcade Sanwa buttons.

RGB LEDs - SK9822

Used backlit for buttons are SK9822 LEDs. I didn't use any specific library, the protocol is quite simple, so I just made few functions to send the data to the LEDs outputs.

dyi arcade buttons midi controller view of particular colors on pressed button

dyi arcade buttons midi controller rgb led SK9822 pinout details

Plastic Body

The case is made of extruded PVC by cutting individual parts on X-CARVE CNC machine. The machine has GRBL controller so it receives a standard G-Code (available in the download section). Cutting tool is 2 flutes Upcut bit. As spindle is used Makita RC0700 router. RMP option has been set on 3rd level (app. 12000 RPM). All settings as feed rate and others are contained in G-Code file, available to download.

The parts were glued up together and sanded to align the edges.

dyi arcade buttons midi controller plastic body parts glued together

Then painted by common spray cans - lightly sanded between layers with 1000 grit sandpaper - 2 layers of base coat and 2 of the finish coat.

dyi arcade buttons midi controller plastic body painted by black mat

Firmware

The basis of the controller for signals processing and sending MIDI data via USB to the computer is PIC micro-controller 18F4550 by Microchip corporation. For firmware development, I use MPLAB X IDE (v5.05 at the time) and basic C compiler for 8bit micro-controllers family XC8. For debugging and programming the PIC chip was used PICKIT3 programmer. USB MIDI interface is established by Microchip Libraries for Applications for USB MIDI communications. Related files were pulled out from the libraries and included to the project in order to achieve project portability in the scope of one folder so there is no need to have MLA installed. Download of the MPLAB project is available in the download section below.

Downloads

Google Sketchup fileGoogle Sketchup (Design)

Eagle CAD softwareEagle CAD File (schematic + PCB)

Microchip MplabX IDE projectFirmware - Microchip MPLABX IDE

Microchip MplabX IDE projectG-CODE Files