Buttons Controller

1.0 HID CY-822A 4.0

Obsolete content

This content was created for an older version and is outdated. Check version 2 for an up-to-date description!

The initial controller for the cockpit was a CY-822A gamepad controller that is often found in “DIY arcade game kits” in various places. It’s a dead cheap PCB that is detected as a gamepad from most computers and while it’s kinda limited in possible inputs it does have a bunch of nice features, like a dedicated connector for backlit buttons. This is also a great place to hook in with a potentiometer to control the brightness of the backlit buttons.

There is also no reason to simply use two when the possible inputs are used up. This is a very decent little PCB that allows for a very easy DIY button without any soldering.

The CY-822A from above partially modified already
The CY-822A from above partially modified already

…we can, of course, even solder here.

CY-822A with analogue input

This is a brief description how to mod an CY-822A USB joystick controller into accepting analogue input. I’ve done this modification now with two of my PCBs and worked with both for an extended period of time without any problems. To achieve this two things have to be done.

Fire hazard

This page describes actions that may result in a fire hazard or an electric shock. Repeat at your own risk.

sdl2-jstest detected 5 axis
sdl2-jstest detected 5 axis
sdl2-jstest detected 5 axis

The PCB comes with 5 analogue axis according to my Linux PC and sdl2-jstest and while I’m not sure where the 5th is located a tiny modification will allow us to use at least 4 of the axis.

Locate the resistors R1 – R8 on the front that make up for 4 possible connections for analogue input with the use of potentiometers. There are 2 resistors with ~10k on the PCB that have to go. The 2 resistors hold 4 of the 5 axis perfectly still in the centre because the middle lane is bridged on the backside. This is the part where the conductor path has to be interrupted. Locate the central lane and simply scratch off the track with a sharp knife. Also clean all the holes of R1 to R8 so you can solder in some new pins for easier access. Use a multimeter to make sure that none of the 4 central soldering points are connected with each other any more. The upper and lower ones stay connected (Plus and GND).

The central lanes that have to be cut exactly the red rings indicate
The central lanes that have to be cut exactly the red rings indicate
Locate the central lane and simply scratch off the track with a sharp knife at the 3 indicated positions.

Next we want to remove the zero ohm resistor at J1 and add a wire bridge instead. Look for an resistor with a single black ring next to R2, remove it, and solder in the wire bridge next to R1. This is basically a jumper setting but with a bridge. I’ve no idea why the designer went with a zero ohm resistor and not with a bridge. My only guess is that this was cheaper for the assembly machines.

The bridge has to be moved at J1 as marked with a red circle here
The bridge has to be moved at J1 as marked with a red circle here

Anyway, this will make the board boot in analogue mode so we do not have to use a mode switch on power on every time. This serves two purposes: Axis are now read from input and actually send as joystick events on the USB wire while the former digital joystick connector (5 pins) is now mapped to Up/Down/Left/Right buttons – so no extra buttons are needed here any more (but can still be added, of course).

Finished mod with 100k potentiometer
Finished mod with 100k potentiometer
Any potentiometer should do – mine are 100k – 200k10k. YMMV.

Now it’s time to connect potentiometers as analogue inputs. This is pretty straight forward. Just make sure that the central connector goes to the centre of each axis. Change the upper with the lower pin if the direction is not as desired.

Please note that any axis that has no input attached will report a lot of jitter making your game/app go nuts. This is what the former resistors at R1 and R2 were there for. Make sure that all inputs get a potentiometer (or a resistor) to prevent this!