I had an old usb steering wheel laying around that died, i had a freetronics leostick laying around so i made this.
i updated the bootloader to the official leonardo one.
Remove these adsRemove these ads by Signing Up

Step 1: Bootloader mods

updated the bootloader to the official leonardo one.
for the steering wheel you will need an arduino leonardo compatible board with the leonardo bootloader.
update these files in root folder >hardware > arduino > cores > arduino
i used i.0.5 of the ide

files to download : HID

Step 2: Code and wiring

Picture of Code and wiring
here is the code i used, edit it to suit your needs :)
void setup()
  pinMode(13, OUTPUT);
  joySt.xAxis = 0;
  joySt.yAxis = 0;
  joySt.zAxis = 0;
  joySt.xRotAxis = 0;
  joySt.yRotAxis = 0;
  joySt.zRotAxis = 0;
  joySt.throttle = 0;
  joySt.rudder = 0;
  joySt.hatSw1 = 0;
  joySt.hatSw2 = 0;
  joySt.buttons = 0;
void loop()
  Serial.write("DIY USB joystick V1 by the nerdling");
  joySt.xAxis = analogRead(A4)/4;
  joySt.yAxis = analogRead(A5)/4;
  joySt.rudder = analogRead(A3)/4;


the wiring is what i used on my wheel, the throttle and brake wiring is what i used because i needed 2 pedals for 1 channel, try it out and see what you need to do to make it suit you

that's all i will tell you because that's all you need figure the rest out e.g to put it all in your wheel each one is your different
hotwired21 month ago

Sorry, this might be not the best idea.

In a specific configuration of the throttle and brake potis there will be

a short circuit between GND and VCC.

Or is this the reason why you are using another GND and this is not a problem?

The nerdling (author)  hotwired21 month ago

i used a different ground because it was closer in the diagram

this is how i wired up the throttle and brake pedals, it works fine no short
it should work with a different ground pin

sk8ter1224 months ago

I cannot get this to work. I get the following error in the compiler:

Controller_3.ino: In function ‘void setup()’:

Controller_3.ino:5:3: error: ‘joySt’ was not declared in this scope

Controller_3.ino: In function ‘void loop()’:

Controller_3.ino:20:3: error: ‘joySt’ was not declared in this scope

Controller_3.ino:23:3: error: ‘Joystick’ was not declared in this scope

what Code do you have before "void setup()"

I swapped out the files in the root folder and used your code. Won't work...

any suggestions? I am also using arduino 1.0.5

use arduino 1.0.1. Modify the root files as this tutorial states, but for arduino 1.0.1. Secondly, make sure you have the Leonardo selected as the board you are using.

I cannot get this code to work for any other versions of arduino accept arduino 1.0.1.

link to all older arduino versions:

The nerdling (author)  sk8ter1224 months ago

did you put the files in the root folder, eg "arduino-1.0.5" or in these folders?

root folder >hardware > arduino > cores > arduino

MarcosL14 months ago

Would a version of this work with an arduino mega? I am rather new to fiddling with Arduinos, got a mega 2560 from a friend and I have a busted steering wheel as well.

The nerdling (author)  MarcosL14 months ago
I don't think it would work
is it can act line a USB keyboard then yes it might
I used a freetronics leostick with the Leonardo boot loader for my steering wheel

Thank you for the reply, after your comment I went googling and there are indeed ways of making the Mega work as a usb HID device, I might do some stuff and try to use your code while I wait for the rest of the hardware I bought for a different project with the same arduino.

The nerdling (author)  MarcosL14 months ago
cool, good luck