4 joystick (6-axis 6-dof) game controller

a 4 joystick game controller for 6axis+ games (inertial thrust space games)

Similar projects worth following
4 joystick game controller made with arduino, programmed with code and driver taken from Cleric-K's github page. The controller is designed to be used for space games, particularly space games that are simple enough that they could be enjoyed from a casual posture (simple navigation and shooting). The game controller allows for all 6 axis of control to be on joysticks. To make the coordination of your pointer fingers easier to learn, simply use each front stick to control one axis. My config is:
- left thumb: strafe updownleftright
- left pointer: pull trigger for throttle, push trigger for reverse thrust
- right thumb: pitch/yaw
- right pointer: roll

here's a simple game to play with it ::


the joystick breakout board files are for the thb series thumbsticks available at digikey, unfortunately I can't seem to save descriptions under those files, but they were created by 07_sev under public commons license. 

to program the controller, just go to cleric-k's vjoyserialfeeder page. 

I have my sketch pasted below, and config available for download, if you would like to use those, although the setup from vjoyserial is very easy. 

my arduino page is here.

I will later include a discussion and theory about using 4 joysticks, and ideal configuration, however my recommendations are in the above description!

My favorite games that currently work well with the controller are : Orbital Racer, Starmade, Absolute Territory (excellent for low performance budget computers), and Infinity Battlescape. I also like Astrokill. More recently I now enjoy Flight of Nova. I highly recommend my Starmade world download for navigation challenges, and Starmade has a demo-version on steam which is the full version of the game. Also there is a game below, called MicroGravityDreams which is just a little minigame.

latest game based on MCD

x-zip-compressed - 31.78 MB - 07/01/2023 at 21:33


fly dangerous custom

json files for fly dangerous custom levels and dev options (my preferred dev options at present)

application/x-zip-compressed - 6.67 MB - 10/30/2022 at 08:02


MicroGravityDreams is originally created by Why485 with some modifications, mostly to the scene, by me. The game now supports control mapping (by rewired!) and hopefully is Hotas Friendly. (to exit the game, press the windows key and close the window in the taskbar)

x-zip-compressed - 31.09 MB - 10/11/2022 at 03:51


credit for game goes to "Why485" with colored gates added by me. This game works with keyboard, xbox gamepad, or my 4joystick controller. unzip the file and make sure all of the contents of the file are in the same file folder when you run the game. Just double click the application! To exit the game, press the windows key and close the window. If you are just excited to try a full manual thrust bit of trying to go through some hoops, it will get you started!! to use the 4 joystick controller, please see logs or the readme for setup: xbox controller controls and keyboard controls: forward: left thumbstick press OR right shoulder or W - reverse: right thumbstick press OR left shoulder or S - yaw: right thumbstick left-right or J / L - pitch: right thumbstick up-down or I / K - roll: left and right triggers or U / O - strafe up, down, left, right: left thumbstick. or up : E , down : Q , left : A , right : D

x-zip-compressed - 28.67 MB - 10/09/2022 at 02:29



license - 234.00 bytes - 02/13/2022 at 22:34


View all 11 files

View all 13 project logs

  • 1
    specific build decisions

    There is a simple "picture schematic" in the images for the page. I used an arduino nano v3. It doesn't matter which axis go to which analog pins or which buttons go to which digital pins, you can manage which channel is which axis in vjoyserialfeeder and each game will need to be set up with customized config anyway.

    The pulldown resistors are 10k, the joysticks are 10k. The joystick tactile buttons are not included in the build. 5v runs from the arduino to the rails on the breadboard, so does ground. The joysticks just plug directly to the analog pins. The power runs from the rails to the tactile buttons on the breadboards, and from the buttons the wire runs to the pins on the arduino. A pulldown resistor is placed between the arduino pins and ground. This means that the sketch will read high as press. 

    I have found that the small buttons are difficult to press in the trigger positions, because your fingers pull at a different angle. Your thumb will easily interact with the buttons, but you are only holding the board with your fingers and palms, so in order to make it easy and smooth to press the buttons on the bottom (your triggers!) I mounted a small block between the buttons and mounted some broken propellers to suspend over the buttons. Then you have a nice surface area to interact with and can easily pull in any direction to press the buttons. If you don't have propellers then you can use plastic knives, or some other flexible yet stable plastic. 

  • 2
    vjoyserialfeeder setup

    The setup for vjoyserialfeeder is pretty easy. I have also uploaded my configuration json, but if your pins are not in the same order as mine, then your axis and buttons will not have the same number order. This doesn't matter though, because you will need to map all of the controls in each game anyway, and mostly you just select the control and press the button or deflect the stick you want, so it's really fine. You will need to calibrate each of your axis, and while using a breadboard you may need to calibrate frequently. If it is soldered together, calibration should be very stable. Don't forget to hit save after you calibrate.

  • 3
    Some troubleshooting tips

    make sure the correct drivers for the specific arduino you have are installed, most of the arduino boards I have use the "ch340" , there is a sparkfun tutorial for the driver installation. You will need these drivers if the arduino appears on device manager as a serial usb device instead of in the com-ports as "ch340 device". -- run the "configure vjoy" app and ensure you have 8 axis and 12 buttons in the profile you set up, none of the other settings should be changed. -- make sure you have the correct comport selected in vjoyserialfeeder, you can check in device manager to see which one the gamepad is. -- once vjoyserialfeeder shows the controller and all of the controls respond, you can verify in "set up usb game controllers" that everything is feeding through vjoy correctly, just check the properties of the vjoy device. -- you should not need to restart your computer after a basic setup, but if you just installed vjoy, or the ch340 drivers, or you just reconfigured vjoy, you may need to. -- presently the Starmade joystick configuration is whacky, you will need to reset your configuration every time you go to the menu, as well as every time you load the game. This can be frustrating as if you need to simply invert an axis, you may need to reset all of your controls to do so, however starmade is very worth the effort, as my courses are just so darn well made.!

View all 3 instructions

Enjoy this project?



Similar Projects

Does this project spark your interest?

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