Joystick with Arduino
Joysticks can be very handy for many applications like retro gaming, robot or robot-arm control,
remote controlling cars or drones.
The Analog Joystick is similar to two potentiometers connected together, one for the vertical
movement (y-axis) and other for the horizontal movement (x-axis).
The joystick also comes with a switch to trigger some event like to switch on / off a device.
But the best thing is: using a joystick with the Arduino is extremely easy!
Required parts: 1 x Arduino Uno (or compatible) 1 x analog joystick like KY-023 5 x jumper cable male - female
How it works
First of all, you have to understand that a joystick gives analog values in the form of a voltage as input to the Arduino. The Arduino uses an analog-to-digital converter (ADC) to generate a digital value from the analog voltage signal. Since the Arduino Uno has an ADC resolution of 10 bits, the values on each analog channel can vary from 0 to 1023.
As long as the joystick is in a neutral position, the values for the x and y axis should be around 500. If the stick is moved on x axis from one end to the other, the x values will change from 0 to 1023 and the same happens when moved along the y axis.
Wiring Diagram for Joystick
Arduino KY-023 ----------------------- A0 VRX A1 VRY Pin 2 SW 5V +5V GND GND
Software for Joystick - Control
/* Arduino Joystick Tutorial
* displays the x-axis and y-axis values to the serial monitor
* writes "button pressed" if the button gets pressed
* Stefan Hager 2022
*/
void setup()
{
Serial.begin(9600);
Serial.println("Joystick test program startet ...");
pinMode(2, INPUT); // for the button
digitalWrite(2, HIGH); // set button pin to high -> signal is LOW when pressed
}
void loop()
{
int button = 1;
int xPos = analogRead(A0); // read analog input pin A0
int yPos = analogRead(A1); // read analog input pin A1
button = digitalRead(2);// button is on pin 2
Serial.print("X: ");
Serial.print(xPos);
Serial.print(" Y: ");
Serial.println(yPos);
// button pressed -> signal low
if(button == 0)
{
Serial.println("button pressed ...");
digitalWrite(2, HIGH); // reset pin 2 to HIGH
}
delay(500);
}
Running the Program
Start the program, move the joystcik and press the button. Look into the serial monitor of the Arduino IDE to see the resulting values.