// ##############################################################
// Joystick Interface #
// ##############################################################
//
// Joystick (KY-023) interface with Arduino Uno (Hardware & Simulation)
//
// Check out the link for Code explanation and Hardware details
// Link:
// http://tech.arunkumarn.in/blogs/arduino-uno/ky-023-joystick-%2B-arduino-uno-wiring-code-%26-calibration-for-beginners/
// Pin Definitions
const int PIN_X = A0; // X-axis analog input
const int PIN_Y = A1; // Y-axis analog input
const int PIN_BTN = 2; // Button digital input
// Calibration values (adjust for your module)
const int CENTER_THRESHOLD = 20; // Deadzone around center
const int MIN_VAL = 0;
const int MAX_VAL = 1023;
const int CENTER_VAL = 512;
void setup() {
// Initialize Serial communication
Serial.begin(9600);
while (!Serial); // Wait for Serial Monitor
// Configure button pin with internal pull-up
pinMode(PIN_BTN, INPUT_PULLUP);
Serial.println("🎮 Joystick Initialized");
Serial.println("X\tY\tButton");
Serial.println("--------------------");
}
void loop() {
// Read analog values (0-1023)
int xValue = analogRead(PIN_X);
int yValue = analogRead(PIN_Y);
// Read button state (LOW = pressed)
bool buttonPressed = (digitalRead(PIN_BTN) == LOW);
// Optional: Apply deadzone filtering for center position
if (abs(xValue - CENTER_VAL) < CENTER_THRESHOLD) xValue = CENTER_VAL;
if (abs(yValue - CENTER_VAL) < CENTER_THRESHOLD) yValue = CENTER_VAL;
// Output to Serial Monitor
Serial.print(xValue);
Serial.print("\t");
Serial.print(yValue);
Serial.print("\t");
Serial.println(buttonPressed ? "PRESSED" : "RELEASED");
// Small delay for stable readings
delay(100);
}