State Change Detection on Joystick

Hi all,

I was curious on how you would do state change detection for the push button on a joystick.

I used the code and the circuit diagram from arduino's state change detection guide, plugging in the joystick wires in place of the pushbutton, however, I couldn't get my joystick button to increment the counter. Plugging the joystick wires into my uno directly did me no favors either.

What do I have to do in order to get my joystick push button to do state change detection?

What do I have to do in order to get my joystick button to do state change detection?

You need to post your program so we can see exactly what you have tried.

Assuming you are using an analog joystick and detecting its position with anlogRead() then one way is with code like this

previousPosition  = currentPosition;
currentPosition = analogRead(joystickPin);
if ( abs( currentPosition - previousPosition > threshold)) {
   // joystick has moved


Here is my current code I modified from the arduino state change detection guide:

// this constant won't change:
const int  buttonPin = 5;    // the pin that the pushbutton is attached to

// Variables will change:
int buttonPushCounter = 0;   // counter for the number of button presses
int buttonState = 0;         // current state of the button
int lastButtonState = 0;     // previous state of the button

void setup() {
  // initialize the button pin as a input:
  pinMode(buttonPin, INPUT);
  // initialize serial communication:

void loop() {
  // read the pushbutton input pin:
  buttonState = digitalRead(buttonPin);

  // compare the buttonState to its previous state
  if (buttonState != lastButtonState) {
    // if the state has changed, increment the counter
    if (buttonState == HIGH) {
      // if the current state is HIGH then the button went from off to on:
      Serial.print("number of button pushes: ");
    } else {
      // if the current state is LOW then the button went from on to off:
    // Delay a little bit to avoid bouncing
  // save the current state as the last state, for next time through the loop
  lastButtonState = buttonState;


So, one of the button wires is connected to pin 5, what is the other button wire connected to?

Here is my current code

I don't see any joystick stuff in that.

Are you sure you have posted the correct program?


How is the joystick button wired? Can you post a schematic? This thread shows how to do state change detection on a button wired to ground and using the internal pullup resistor.