The analog joystick is one of those electronic components you have certainly used while playing video games:

You can move the joystick around, and you can also click it from top to bottom:

Any action performed will send the appropriate electronic signals to the circuit it’s connected to.

The 5 pins of the joystick are:

• GND, the input LOW signal
• +5V, the input HIGH signal, can also be 3.3V when using a 3.3V based device
• VRx, the analog signal that represents the position of the joystick on the x axis
• VRy, the analog signal that represents the position of the joystick on the y axis
• SW, short for switch, is the digital value LOW when pressed, otherwise HIGH

You connect VRx and VRy to an analog input pin to get their value.

Analog inputs range from 0 to 1023 since they use a 10 bits resolution.

When watching the joystick with the pins on the left, the X axis values assumes values from 0 (full left) to 1023 (full right) and 498 in the middle. The Y axis values assumes values from 0 (top) to 1023 (bottom) and 498 in the middle.

Assuming VRx is connected to A0 and VRy to A1:

int x = analogRead(A0);
int y = analogRead(A1);

A simple program that prints the values is this:

void setup() {
Serial.begin(9600);
}

void loop() {
Serial.print("X = ");
Serial.print(x);
Serial.print("\tY = ");
Serial.println(y);
delay(100);
}

You can also think of them as voltage values. Assuming a 5V positive voltage, you can multiply the value you get by 5.0, and then divide it by 1023 to get a 0 to 5 range:

x = analogRead(A0);
float x_val = (x * 5.0) / 1023;
You can perform a similar calculation to get the values relative to a 3.3V Vcc.