Files

70 lines
1.9 KiB
Markdown

# Joystick
_`Revision History: initial documentation`_
A component that interfaces with a 4 directional joystick and provides debounced readings. The joystick supports local input and remote control via Modbus.
## Requirements
### Pins
- `4 GPIO pins` for UP, DOWN, LEFT, and RIGHT directions
- Default pins on ESP32:
- PIN_JOYSTICK_UP = 47
- PIN_JOYSTICK_DOWN = 48
- PIN_JOYSTICK_LEFT = 40
- PIN_JOYSTICK_RIGHT = 39
### Dependencies
- ArduinoLog library
- ModbusTCP support in the framework
- Enabled in config.h (`ENABLE_JOYSTICK`)
## Features
- Detects 5 positions: CENTER, UP DOWN, LEFT, RIGHT
- Built-in debouncing logic (confirms position changes through multiple readings)
- Tracks how long a position has been held
- Supports two modes of operation:
- LOCAL: Direct readings from physical joystick
- REMOTE: Position set remotely via Modbus
- Full Modbus integration with the following registers:
- POSITION: Current position (0 = CENTER, 1 = UP, 2 = DOWN, 3 = LEFT, 4 = RIGHT)
- MODE: Current operation mode (0 = LOCAL, 1 = REMOTE)
- OVERRIDE: Position used when in REMOTE mode
## Todos
- Consider adding diagonal position detection
- Implement configurable debounce timings via Modbus
## Example
```cpp
#ifdef ENABLE_JOYSTICK
#ifdef PIN_JOYSTICK_UP
joystick = new Joystick(
this, // owner
PIN_JOYSTICK_UP, // up pin
PIN_JOYSTICK_DOWN, // down pin
PIN_JOYSTICK_LEFT, // left pin
PIN_JOYSTICK_RIGHT, // right pin
100 // Modbus register address
);
if (joystick)
{
components.push_back(joystick);
Log.infoln(F("Joystick initialized. Pins: UP%dDOWN%d:LEFT%d:RIGHT%d, MB%d"),
PIN_JOYSTICK_UP, PIN_JOYSTICK_DOWN,
PIN_JOYSTICK_LEFT, PIN_JOYSTICK_RIGHT, 100);
}
else
{
Log.errorln(F("Joystick initialization failed."));
}
#endif
#endif
```