Example Code for Joystick EventDriven

Last revision 2025/12/10

This article presents example code for managing joystick inputs using an event-driven approach with Arduino, covering detection of directional and button presses.

Sample Code


/*
 *  function:   test dfr0008
 *  by:         lisper ([email protected])
 *  created:    2013-11-04
 *
 */
#include <Arduino.h>

#define up_button   8
#define down_button A1
#define left_button 9
#define right_button    12

#define stick_button A0
#define level_stick A3
#define vertical_stick A2

int vertical_value=0;   //current value
int level_value=0;      //current value
int vertical_valuep=0;  //previous value
int level_valuep=0;     //previous value

uint16_t key_delay_time = 20;   // for ispressed ()

//
void setup () {
    pinMode (stick_button, INPUT);
    pinMode (level_stick, INPUT);
    pinMode (vertical_stick, INPUT);

    pinMode (up_button, INPUT);
    pinMode (down_button, INPUT);
    pinMode (left_button, INPUT);
    pinMode (right_button, INPUT);

    Serial.begin (9600);
}

//
void loop () {

    vertical_value = analogRead (vertical_stick);
    level_value = analogRead (level_stick);

    if (vertical_value != vertical_valuep) {
        Serial.print ("vertical=");
        Serial.println (vertical_value);
    }
    if (level_value != level_valuep) {
        Serial.print ("level=");
        Serial.println (level_value);
    }

    vertical_valuep = vertical_value;
    level_valuep = level_value;

    if (ispressed (up_button))
        Serial.println ("up pressed");
    if (ispressed (down_button))
        Serial.println ("down pressed");
    if (ispressed (left_button))
        Serial.println ("left pressed");
    if (ispressed (right_button))
        Serial.println ("right pressed");
    if (ispressed (stick_button))
        Serial.println ("stick pressed");
    delay (10);
}

//check button
boolean ispressed (uint8_t key) {
    if (digitalRead (key) == 0) {
        delay (key_delay_time);
        if (digitalRead (key) == 0)
            return true;
    }
    return false;
}

Was this article helpful?

ON THIS PAGE

TOP