I was previously building and selling control boxes for Cobalt Flux DDR pads. I was only building and selling them because I made one for myself, and had a few people reach out for them, so I hosted this page. About a year after I started making my boxes, Cobalt Flux started producing pads and boxes again, so I stopped. Because of that, I am no longer officially offering control boxes for sale, except for custom/strange pads that need different pinouts.


Because of this, I am releasing here a set of instructions and code that anyone should be able to use in order to build their own DDR Pad Control Box.

Parts List:

Arduino Pro Micro(Amazon (3 for $16)

VGA connector(Amazon ($12)

A box((Here is the 3d model for this design)

Below is the arduino code you will need.

Simply attach pin 1 of the VGA connector to any ground pin on the arduino, (skip arduino pin 0 because the code does), and connect pins 2-5 on the VGA connector to pins 1-4 on the Arduino.

Assembly:

Put it in a box.

If you 3d print the box above, after you test the box, just use hot glue to stick the VGA connector down, then use more hot glue to stick the arduino on top of that, and again more hot glue to close the box. super simple to assemble and you can take it apart with a hair dryer if you need to! (just be careful, melted plastic is dangerous)


DDrcode.ino

/*WT.2019


/*

* This code contains the follow functions:

* - void setup(): Sets pins 1, 2, 3, 4, 5, 6, 7, 8, 9 to input with pull-up resistors enabled and begins Keyboard functionality

* - void loop(): Main loop - reads pin voltages and sends out corresponding keystrokes via USB

*/


/*

* Pinout:

* - "HIGH" voltage button contacts - pins 1, 2, 3, 4, 5, 6, 7, 8, 9

* - "GND" voltage button contacts - GND pin

*/


#include <Keyboard.h>


int centerStatus=1;

int centerStatusPrev=1;

int downleftStatus=1;

int downleftStatusPrev=1;

int downrightStatus=1;

int downrightStatusPrev=1;

int upStatus=1;

int upStatusPrev=1;

int leftStatus=1;

int leftStatusPrev=1;

int downStatus=1;

int downStatusPrev=1;

int rightStatus=1;

int rightStatusPrev=1;

int startStatus=1;

int startStatusPrev=1;

int selectStatus=1;

int selectStatusPrev=1;

int up2Status=1;

int up2StatusPrev=1;

int left2Status=1;

int left2StatusPrev=1;

int down2Status=1;

int down2StatusPrev=1;

int right2Status=1;

int right2StatusPrev=1;

int start2Status=1;

int start2StatusPrev=1;

int select2Status=1;

int select2StatusPrev=1;

void setup()

{

pinMode(1,INPUT_PULLUP);

pinMode(2,INPUT_PULLUP);

pinMode(3,INPUT_PULLUP);

pinMode(4,INPUT_PULLUP);

pinMode(5,INPUT_PULLUP);

pinMode(6,INPUT_PULLUP);

pinMode(7,INPUT_PULLUP);

pinMode(8,INPUT_PULLUP);

pinMode(9,INPUT_PULLUP);

pinMode(10,INPUT_PULLUP);

pinMode(16,INPUT_PULLUP);

pinMode(14,INPUT_PULLUP);

pinMode(15,INPUT_PULLUP);

pinMode(18,INPUT_PULLUP);

pinMode(19,INPUT_PULLUP);

Keyboard.begin();

}


void loop()

{

centerStatus=digitalRead(1);

downrightStatus=digitalRead(2);

downleftStatus=digitalRead(3);

upStatus=digitalRead(4);

leftStatus=digitalRead(5);

downStatus=digitalRead(6);

rightStatus=digitalRead(7);

startStatus=digitalRead(8);

selectStatus=digitalRead(9);

up2Status=digitalRead(10);

down2Status=digitalRead(16);

left2Status=digitalRead(14);

right2Status=digitalRead(15);

start2Status=digitalRead(18);

select2Status=digitalRead(19);

//Center Panel PRESSED

if (centerStatus!=centerStatusPrev && centerStatus==LOW)

{

Keyboard.press('a');

centerStatusPrev=centerStatus;

}

//Center Panel RELEASED

if (centerStatus!=centerStatusPrev && centerStatus==HIGH)

{

Keyboard.release('a');

centerStatusPrev=centerStatus;

}

//downleft ARROW PRESSED

if (downleftStatus!=downleftStatusPrev && downleftStatus==LOW)

{

Keyboard.press('s');

downleftStatusPrev=downleftStatus;

}

//downleft ARROW RELEASED

if (downleftStatus!=downleftStatusPrev && downleftStatus==HIGH)

{

Keyboard.release('s');

downleftStatusPrev=downleftStatus;

}

//downright ARROW PRESSED

if (downrightStatus!=downrightStatusPrev && downrightStatus==LOW)

{

Keyboard.press('d');

downrightStatusPrev=downrightStatus;

}

//downright ARROW RELEASED

if (downrightStatus!=downrightStatusPrev && downrightStatus==HIGH)

{

Keyboard.release('d');

downrightStatusPrev=downrightStatus;

}

//UP ARROW PRESSED

if (upStatus!=upStatusPrev && upStatus==LOW)

{

Keyboard.press('f');

upStatusPrev=upStatus;

}

//UP ARROW RELEASED

if (upStatus!=upStatusPrev && upStatus==HIGH)

{

Keyboard.release('f');

upStatusPrev=upStatus;

}

//LEFT ARROW PRESSED

if (leftStatus!=leftStatusPrev && leftStatus==LOW)

{

Keyboard.press('g');

leftStatusPrev=leftStatus;

}

//LEFT ARROW RELEASED

if (leftStatus!=leftStatusPrev && leftStatus==HIGH)

{

Keyboard.release('g');

leftStatusPrev=leftStatus;

}

//DOWN ARROW PRESSED

if (downStatus!=downStatusPrev && downStatus==LOW)

{

Keyboard.press('h');

downStatusPrev=downStatus;

}

//DOWN ARROW RELEASED

if (downStatus!=downStatusPrev && downStatus==HIGH)

{

Keyboard.release('h');

downStatusPrev=downStatus;

}

//RIGHT ARROW PRESSED

if (rightStatus!=rightStatusPrev && rightStatus==LOW)

{

Keyboard.press('j');

rightStatusPrev=rightStatus;

}

//RIGHT ARROW RELEASED

if (rightStatus!=rightStatusPrev && rightStatus==HIGH)

{

Keyboard.release('j');

rightStatusPrev=rightStatus;

}

//start ARROW PRESSED

if (startStatus!=startStatusPrev && startStatus==LOW)

{

Keyboard.press('k');

startStatusPrev=startStatus;

}

//start ARROW RELEASED

if (startStatus!=startStatusPrev && startStatus==HIGH)

{

Keyboard.release('k');

startStatusPrev=startStatus;

}


//select ARROW PRESSED

if (selectStatus!=selectStatusPrev && selectStatus==LOW)

{

Keyboard.press('l');

selectStatusPrev=selectStatus;

}

//select ARROW RELEASED

if (selectStatus!=selectStatusPrev && selectStatus==HIGH)

{

Keyboard.release('l');

selectStatusPrev=selectStatus;

}


//up2 ARROW PRESSED

if (up2Status!=up2StatusPrev && up2Status==LOW)

{

Keyboard.press('q');

up2StatusPrev=up2Status;

}

//up2 ARROW RELEASED

if (up2Status!=up2StatusPrev && up2Status==HIGH)

{

Keyboard.release('q');

up2StatusPrev=up2Status;

}

//left2 ARROW PRESSED

if (left2Status!=left2StatusPrev && left2Status==LOW)

{

Keyboard.press('w');

left2StatusPrev=left2Status;

}

//left2 ARROW RELEASED

if (left2Status!=left2StatusPrev && left2Status==HIGH)

{

Keyboard.release('w');

left2StatusPrev=left2Status;

}

//down2 ARROW PRESSED

if (down2Status!=down2StatusPrev && down2Status==LOW)

{

Keyboard.press('e');

down2StatusPrev=down2Status;

}

//down2 ARROW RELEASED

if (down2Status!=down2StatusPrev && down2Status==HIGH)

{

Keyboard.release('e');

down2StatusPrev=down2Status;

}

//right2 ARROW PRESSED

if (right2Status!=right2StatusPrev && right2Status==LOW)

{

Keyboard.press('r');

right2StatusPrev=right2Status;

}

//right2 ARROW RELEASED

if (right2Status!=right2StatusPrev && right2Status==HIGH)

{

Keyboard.release('r');

right2StatusPrev=right2Status;

}

//start2 ARROW PRESSED

if (start2Status!=start2StatusPrev && start2Status==LOW)

{

Keyboard.press('t');

start2StatusPrev=start2Status;

}

//start2 ARROW RELEASED

if (start2Status!=start2StatusPrev && start2Status==HIGH)

{

Keyboard.release('t');

start2StatusPrev=start2Status;

}


//select2 ARROW PRESSED

if (select2Status!=select2StatusPrev && select2Status==LOW)

{

Keyboard.press('y');

select2StatusPrev=select2Status;

}

//select2 ARROW RELEASED

if (select2Status!=select2StatusPrev && select2Status==HIGH)

{

Keyboard.release('y');

select2StatusPrev=select2Status;

}

}

fb.williamtroup.com