Making a Button Box for Thrustmaster HOTAS X

I love flying and fighting in Elite Dangerous using my joystick/throttle combo – but I found there were just too many times I needed to reach over to the keyboard for actions. I thought it would be great to have a Button Box to give me easy (and tactile) access to more even functions.

In Elite you can have as many joysticks and USB devices attached as you like, so there’s no problem having a second ‘joystick’ with more buttons available. You can buy professional pre-built button boxes, but I wanted to try building my own.

Purchased Parts List

  • USB Encoder and Cables, Momentary push buttons

Optional Parts

Since I already had some of these from previous projects I didn’t buy them this time, and only needed a few extras for this project, but here’s some links for the pieces if you don’t already have them.

  • 12mm (larger) momentary buttons
  • Rocker switch
  • Heatshrink Tubing
  • USB Number pad

Bigger push buttons or Rocker / Toggle buttons aren’t essential, and you can get away without heatshrink wrapping (you could just use insulating tape). The USB Number Pad is a great way of giving you cursor controls too, but it isn’t necessary for this project either. Again I had one lying around and decided to include it.

Getting A Box…

You’ll need some kind of a box to mount these in. You can buy a nice box in a range of materials – just as long as the wall thickness is between about 1mm and 3mm so the buttons will fit, or if you have something around that will do, you can use that! I had some sections of plastic conduit/trunking off-cuts which I thought would be nice, so I eventually used those.

Ordering the components : I only ordered the USB Encoder + cables, and a box of mini buttons, since I had a few spare buttons and heatshrink already.

The encoder comes with a USB cable, and a set of mini cables that you use to connect it to buttons. It does come with instructions too, showing you which of its little sockets is for which button ID. It will accept up to 12 buttons, plus a 4-way joystick (or a further 4 switches), so that’s up to 16 actions you can have a button for.

Purchased Components

The buttons in the pack I bought came in a tidy little box, and had their nut and washers separately. This box is too small to fit the encoder in though!

Mini Buttons
Powering Up

The cables have terminals that are just the right size for connecting straight onto the buttons – they just push into place and lock reasonably firmly, so you don’t need to solder. Then you just push the white plug into place on the encode board.

Connecting Buttons

It’s easy to test that these work – use the windows function. You’ll need to set up your USB device a bit first:

Go to your windows settings and search for Game Controllers

It’ll show your device as a USB Encoder in the list, select it, and it will show you the current state of each of its buttons: Here’s what it shows as I press the button I have plugged in the the ‘2’ slot on the encoder.

Trying a button


I wasn’t sure exactly what layout I wanted in the end, so I guessed a few ideas into a prototype in an old plastic box I had lying around. (I think it maybe had business cards or something in at some point.)

Plastic Box

I cut out and used a piece of cardboard on the top (double thickness) and just pushed the buttons through into some locations to see how it would feel.

Quick Prototype
Button Prototype

Prototype Results : I tried out having some big buttons for critical functions, and big button for push-to-talk, and smaller buttons for other things. I thought maybe I could try having a set of cursor buttons (the little blue ones) with a select (yellow) and page forward and back (red and green). This worked, but without the big selectors (for panel 1,2,3,4) it really didn’t help. Also I learned that too tight a cluster of buttons was actually quite hard to use.

I used a couple of double-sided sticky-fixers to attach it to the front of the joystick/throttle. That worked OK for the purpose of stopping it sliding everywhere, but it wasn’t strong enough to allow me to use the metal toggle switch, which needed more force to latch it, so I ended up not using that.

The Final Version

I decided to simplify a bit;

For the left hand set I wanted super-fast access to three buttons on the left in a nice comfortable pattern, for easy access to Shield Cell, Heat Sink, and Chaff. I also wanted a button for PTT (Push To Talk) for when on team-comms, with that being either a push or a latching switch.

On the right I wanted controllers for easily selecting most hostile (‘big red button’), forward and backward through either targets and hostile targets, and because it’s fun hunting big ships, some buttons for targetting subsystems.

Using Conduit

I cut the piece of plastic trunking conduit I had down to size, and using the outlines of the joystick and throttle, cut in an arc to match on each side.


The joystick can be optionally attached to the throttle by allen screws, so instead I wanted to attach these to the plastic to make a fixed unit. I warmed the plastic over a light flame (actually a tea-light candle) and once pliable I could squidge it into the right place, then cut a screw hole through and attach with little machine screws and nuts.

The joystick and throttle are connected by a cable, which I ran through the gap towards the back.

conduit trimmed
Conduit Raised Area

The top part of the trunking has panels that slot into the top channels, I didn’t have a large piece but several smaller rectangles.

Conduit Panels

I chose three of these – a larger one for the middle, and two smaller ones, and cut the outer ones again with a matching arc. Here’s how it looks as they clack into place.

Panels Trimmed To Shape

I marked out where I wanted buttons to go… drilling a small hole for the centre point (you can see the diameter of the screw and nut here is much bigger). I used that as a pilot hole to drill out the wider hole for the push button.

Marking Out for Holes

I also marked out a rectangle for the rocker toggle switch. This doesn’t have a screw thread but little push latches inside to hold it in place.

On the other side I had a slightly simpler arrangement – two groups of two, a central larger button, and two more little buttons. Pencil here to begin with, then a marker dot.

Other Side Marking

Here’s how they look after drilling and filing out. This plastic makes a lot of mess! Removing all of the burrs helps, although they don’t need to be perfect holes as the buttons have small flanges which extend wider than the hold, and will easily hide a millimetre or so of oops. One of the nice things about having two separate panels is that if I did completely mess up one, I could replace with a different top piece.

Holes cut and filed

Flipping over, I’ve pushed the buttons through, and tightened up the nut on each to fix it to the panel. I’ve got the rocker and a momentary push wired slightly together here, more on that later.

It’s not essential but I did find that having the terminals on approximate diagonals made it easier to push them in place without the others getting in the way as much, but of course that’s going to depend on the layout.

Buttons fixed

Here’s how they look placed on the conduit.

Panels in location

Next up, put the USB encoder inside the conduit. This has so much space I didn’t have to be extra careful, but if the box was shallower the cables could get a bit squished. I twist-tied the USB cable to fix it into place, allowing the encoder board to move a bit, but not too much.

USB Device in place

Here’s the USB Number pad – it’s about the same size as the middle panel (entirely by luck) and so I’ve just hot-glued it against the panel. There’s a really big area of contact here so it worked fine, but I think it would probably have been OK even with just a few dabs. If ever I want to remove this I know that hot glue will prise off plastic fairly easily.

Number Pad
Hot Gluing Pad

It clicks into the conduit nicely.

Pad in place

For the PTT, I wanted to be able to either press-and-hold a button to talk, or if I needed to talk and fly at the same time, I could toggle the rocker switch which could stay on. To accomplish this, I wired the two in parallel, so that either switch in the ‘on’ position would complete the circuit. A dab of solder keeps them there, but just twisting the wires through the hole in the terminal is probably enough.

The bigger switch has larger terminals, but luckily the USB encoder kit came with wires for larger terminals too. Here they are pushed in.

Wiring the PTT

In my prototype, where the wires were squished rather close together, they would sometimes cross connect (pushing the red and black close enough to touch). To avoid this in the final build, I had small sections of heat-shrink added over each terminal, and then heated to shrink them into place, with just the end of the terminal showing.

Heatshrinking the terminals

Here’s how that looks pushing them onto each button.

Plugging in the terminals

Then each button gets connected into the encoder by pushing the plug in. I did this in order working from the furthest to nearest, just to try to avoid crossing wires too much.

Plugging buttons into usb

Left hand side:

Left hand block wiring

Right hand side: I tested each button as I’d added, so if any of the connections were loose I’d know about it straight away. The terminals are quite good for locking in place though, so I didn’t have any problems.

Right hand block wiring

To prevent untidy cables all over the place, cable ties (or just twist ties) really help.

Tidying up the wiring

Here they are now fitted to the conduit

Button panels in place

And with the keypad in too.

panels and pad in place

I used a small USB hub here with switches in (the little blue lights), meaning I could plug in the joystick, the USB number pad, and the USB Encoder, all into one hub, and from there into a USB connection in my PC.

button box

Some labels really help here; so I have PTT (Push To Talk) button and switch, buttons for Chaff, Heat Sink, and Shield. On the right I have green contact prev/next, red hostile prev/next and Most Hostile, and then in white and black for sub system prev/next. I used a dymo label printer here with white backing, which you can just about make out against the white of the plastic.

Labelled buttons

I’ve also remapped the keys on the USB keypad, to give me panel 1,2,3,4, cursor keys, select, back, and page forward/back. The extra three buttons there are 0%, 75% and 100% speed, which is handy. The extra few buttons are available for further mapping – I’ve had them for selecting wingman, their target, and for FSD jumps.

all labelled

There is my completed button box. That’s actually only 11 buttons, and I still have the ‘joystick’ buttons available, so I could add a further 5 functions by drilling more holes and adding more buttons.

When using this, I rarely need to use my keyboard/mouse now apart from for relatively unusual operations.

I did a little bit of soldering and heat-shrinking here to make a slightly more tidy and robust job, but that’s absolutely optional. Probably 75% of the time was spent on cutting the conduit and panels with curves and adding fittings to attach them to the joystick and throttle. Again that’s entirely optional, just a box would have worked fine!

I’ve been thinking about maybe adding the buttons onto the joystick handle itself but that’s definitely a project for another day!

Leave a Reply