• Wed. Nov 1st, 2023

DIY Game Controllers

Homemade hardware to take your gaming experience to the next level!

DIY Joystick: Using the Arduino Joystick Library 2.0

Make sure you are using the Leonardo for your homemade game controller and not the Uno.
Arduino Pro Micro
Arduino Pro Micro
The Arduino Leonardo and Pro Micro are the only two boards the Arduino Joystick Library supports.
The Arduino Leonardo and Pro Micro are the only two boards the Arduino Joystick Library supports.


This is mainly taken from the Arduino Joystick Library GitHub page and lightly edited by myself. To see the original as well as additional help and support visit the GitHub repository yourself at the link below.

This is the 2.0 version of the Arduino Joystick Library. As far as requests for features in the next version? Most of these requests fall into the following two categories:

  • Increase the precision of the axes.
  • Make a version with only a specified set of features.

To accommodate these requests plus a few others Version 2.0 of the Arduino Joystick Library is here.

Arduino Joystick Library 2.0

Out of the box the Arduino Leonardo and the Arduino Micro appear to the host computer as a generic keyboard and mouse. The Arduino Joystick Library Version 2.0 can be used with Arduino IDE 1.6.6 (or above) to add one or more joysticks (or gamepads) to the list of HID devices an Arduino Leonardo or Arduino Micro (or any Arduino clone that is based on the ATmega32u4) can support. This will not work with Arduino IDE 1.6.5 (or below) or with non-32u4 based Arduino devices (e.g. Arduino UNO, Arduino MEGA, etc.).


The joystick or gamepad can have the following features:

  • Buttons (default: 32)
  • Up to 2 Hat Switches
  • X, Y, and/or Z Axis (up to 16-bit precision)
  • X, Y, and/or Z Axis Rotation (up to 16-bit precision)
  • Rudder (up to 16-bit precision)
  • Throttle (up to 16-bit precision)
  • Accelerator (up to 16-bit precision)
  • Brake (up to 16-bit precision)
  • Steering (up to 16-bit precision)

These features are configured using the Joystick_ class’s constructor.


The latest build of Version 2.0 of the Arduino Joystick Library can be downloaded from the following GitHub repository: Arduino Joystick Library 2.0

The library can also be downloaded directly using the following: https://github.com/MHeironimus/ArduinoJoystickLibrary/archive/version-2.0.zip

Copy the Joystick folder to the Arduino Libraries folder (typically located at %userprofile%\Documents\Arduino\libraries on Microsoft Windows machines). On Microsoft Windows machines this can be done by executing deploy.bat. The library should now appear in the Arduino IDE list of libraries.

Included Examples

The example Arduino sketch files listed below are included in this library. These will appear in the Arduino Example menu when the Arduino Joystick Library is installed.

JoystickTest – Simple test of the Joystick library. It exercises many of the Joystick library’s functions when pin A0 is grounded.

MultipleJoystickTest – Creates 4 Joysticks using the library and exercises the first 16 buttons, the X axis, and the Y axis of each joystick when pin A0 is grounded.

JoystickButton – Creates a Joystick and maps pin 9 to button 0 of the joystick, pin 10 to button 1, pin 11 to button 2, and pin 12 to button 3.

JoystickKeyboard – Creates a Joystick and a Keyboard. Maps pin 9 to Joystick Button 0, pin 10 to Joystick Button 1, pin 11 to Keyboard key 1, and pin 12 to Keyboard key 2.

GamepadExample – Creates a simple Gamepad with an Up, Down, Left, Right, and Fire button.

DrivingControllerTest – Creates a Driving Controller and tests 4 buttons, the Steering, Brake, and Accelerator when pin A0 is grounded.

FlightControllerTest – Creates a Flight Controller and tests 32 buttons, the X and Y axis, the Throttle, and the Rudder when pin A0 is grounded.

HatSwitchTest – Creates a joystick with two hat switches. Grounding pins 4 – 11 cause the hat switches to change position.

Running the JoystickTest Example

The JoystickTest example sketch is included with the library. I recommend using this example to verify everything is working properly before beginning to write your own sketch files. Load, compile, and upload this example sketch file to an Arduino Leonardo or Micro using the Arduino IDE (version 1.6.6 or above).

Once you have uploaded the JoystickTest sketch file to the Arduino Leonardo or Pro Micro, perform the following steps to verify everything is working properly. Note: the following steps are for Windows 10. If you have a different version of Windows or a different operating system, these steps may differ.

Open the “Devices and Printers” window. This can be done by clicking the Start menu or pressing the Windows Key and typing “Devices and Printers”.

Arduino Settings Menu

The Arduino Leonardo or Arduino Pro Micro should appear in the list of devices.

Right mouse click on the Arduino Leonardo or Arduino Micro to display the settings menu.

Select “Game controller settings” to get to the “Game Controllers” dialog.

Select the Arduino

The Arduino Leonardo or Micro should appear in the list of installed game controllers. Select the Arduino Leonardo or Micro and click the Properties button to display the game controller test dialog.

Testing the Arduino Joystick

While this dialog has focus, ground pin A0 on the Arduino to activate the test script.

The test script will test the game controller functionality in the following order:

  • 32 buttons
  • throttle and rudder
  • X and Y Axis
  • Z Axis
  • 2 Hat Switches
  • X, Y, and Z Axis Rotation

Off to the Races!

You now know how to use either an Arduino Leonardo or Pro Micro to create a rudimentary game controller. Dive deeper into the example sketches provided and see what you can hack together.

Here’s another post about making a rudimentary joystick with an Arduino Leonardo.

Here is a post to familiarize yourself with the Hardware side of the Arduino Leonardo.

2 thoughts on “DIY Joystick: Using the Arduino Joystick Library 2.0”
  1. […] We don’t make much use of the Arduino Uno R3 around here but we do make up for it with our use of the Arduino Leonardo and Pro Micro boards. You can make a rudimentary video game controller with either of them alternatively you can familiarize yourself with the Video Game Library 2.0 that makes all of this a breeze here. […]

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.