70 lines
1.9 KiB
Markdown
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
|
|
```
|