

The Adafruit Mini Analog Thumbstick (Part ID: 3246) is a compact joystick module designed to provide precise analog input for a variety of applications. It features two axes of movement (X and Y) and an integrated push-button switch, making it ideal for controlling devices such as robots, gaming systems, and interactive projects. Its small size and versatility make it a popular choice for hobbyists and professionals alike.








The Adafruit Mini Analog Thumbstick is designed for ease of use and compatibility with microcontrollers like Arduino. Below are its key technical details:
| Parameter | Value |
|---|---|
| Manufacturer | Adafruit |
| Part ID | 3246 |
| Operating Voltage | 3.3V to 5V |
| Output Type | Analog (X and Y axes), Digital (button) |
| X/Y Axis Resistance | 10 kΩ potentiometers |
| Push-Button Type | Momentary switch |
| Dimensions | 26mm x 26mm x 20mm |
| Weight | 6g |
The module has 5 pins for interfacing with a microcontroller. The table below describes each pin:
| Pin Name | Description |
|---|---|
| VCC | Power supply input (3.3V to 5V) |
| GND | Ground |
| VRx | Analog output for the X-axis |
| VRy | Analog output for the Y-axis |
| SW | Digital output for the push-button (active LOW) |
To use the Adafruit Mini Analog Thumbstick in a circuit, follow these steps:
VCC pin to a 3.3V or 5V power source and the GND pin to ground.VRx and VRy pins to analog input pins on your microcontroller (e.g., Arduino).SW pin to a digital input pin on your microcontroller. Use a pull-up resistor if necessary, as the button output is active LOW.Below is an example of how to connect the thumbstick to an Arduino UNO:
VCC → 5VGND → GNDVRx → A0VRy → A1SW → D2The following Arduino sketch reads the X and Y axis values and detects button presses:
// Pin definitions
const int VRxPin = A0; // X-axis analog input
const int VRyPin = A1; // Y-axis analog input
const int SWPin = 2; // Push-button digital input
void setup() {
// Initialize serial communication for debugging
Serial.begin(9600);
// Configure the push-button pin as input with internal pull-up
pinMode(SWPin, INPUT_PULLUP);
}
void loop() {
// Read the X and Y axis values (0 to 1023)
int xValue = analogRead(VRxPin);
int yValue = analogRead(VRyPin);
// Read the push-button state (LOW when pressed)
bool buttonPressed = (digitalRead(SWPin) == LOW);
// Print the values to the Serial Monitor
Serial.print("X: ");
Serial.print(xValue);
Serial.print(" | Y: ");
Serial.print(yValue);
Serial.print(" | Button: ");
Serial.println(buttonPressed ? "Pressed" : "Released");
// Add a small delay for stability
delay(100);
}
Joystick readings are unstable or noisy:
VRx/VRy pins and ground to filter noise.Push-button does not register presses:
SW pin is connected to the correct digital input pin.Joystick does not respond:
VCC and GND.Readings are inverted:
Q: Can I use this joystick with a Raspberry Pi?
A: Yes, the joystick can be used with a Raspberry Pi. Connect the analog outputs (VRx and VRy) to an ADC (Analog-to-Digital Converter) module, as the Raspberry Pi does not have built-in analog input pins.
Q: What is the range of the analog output values?
A: The analog output values range from 0 to 1023 when using a 10-bit ADC, such as the one on an Arduino UNO.
Q: Is the joystick compatible with 3.3V systems?
A: Yes, the joystick operates at both 3.3V and 5V, making it compatible with a wide range of microcontrollers.
Q: Can I replace the push-button?
A: The push-button is integrated into the module and cannot be replaced without significant modification.