{"id":13622341,"url":"https://github.com/MHeironimus/ArduinoJoystickLibrary","last_synced_at":"2025-04-15T05:34:40.670Z","repository":{"id":37549692,"uuid":"46496316","full_name":"MHeironimus/ArduinoJoystickLibrary","owner":"MHeironimus","description":"An Arduino library that adds one or more joysticks to the list of HID devices an Arduino Leonardo or Arduino Micro can support.","archived":false,"fork":false,"pushed_at":"2025-01-21T02:14:50.000Z","size":147,"stargazers_count":2214,"open_issues_count":129,"forks_count":426,"subscribers_count":137,"default_branch":"master","last_synced_at":"2025-04-13T00:38:11.664Z","etag":null,"topics":["arduino-leonardo","arduino-library","arduino-micro","gamepad","joystick-library"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MHeironimus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-11-19T14:10:12.000Z","updated_at":"2025-04-12T19:34:56.000Z","dependencies_parsed_at":"2025-02-22T05:00:55.939Z","dependency_job_id":"3a6d4e74-4020-4122-a48f-0c09eadc216e","html_url":"https://github.com/MHeironimus/ArduinoJoystickLibrary","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MHeironimus%2FArduinoJoystickLibrary","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MHeironimus%2FArduinoJoystickLibrary/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MHeironimus%2FArduinoJoystickLibrary/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MHeironimus%2FArduinoJoystickLibrary/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MHeironimus","download_url":"https://codeload.github.com/MHeironimus/ArduinoJoystickLibrary/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248650414,"owners_count":21139671,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arduino-leonardo","arduino-library","arduino-micro","gamepad","joystick-library"],"created_at":"2024-08-01T21:01:17.883Z","updated_at":"2025-04-15T05:34:40.641Z","avatar_url":"https://github.com/MHeironimus.png","language":"C++","readme":"# Arduino Joystick Library\n\n#### Version 2.1.1\n\nThis library can be used with Arduino IDE 1.6.6 or above (see [Wiki - Testing Details](https://github.com/MHeironimus/ArduinoJoystickLibrary/wiki/Testing-Details) for more information) to add one or more joysticks (or gamepads) to the list of HID devices an [Arduino Leonardo](https://www.arduino.cc/en/Main/ArduinoBoardLeonardo) or [Arduino Micro](https://www.arduino.cc/en/Main/ArduinoBoardMicro) (or any Arduino clone that is based on the ATmega32u4) can support. This library will also work with the [Arduino Due](https://www.arduino.cc/en/Main/ArduinoBoardDue), thanks to [@Palakis](https://github.com/Palakis). A complete list of supported boards can be found in the [Wiki - Supported Boards](https://github.com/MHeironimus/ArduinoJoystickLibrary/wiki/Supported-Boards). This will not work with Arduino IDE 1.6.5 (or below) or with non-32u4 based Arduino devices (e.g. Arduino UNO, Arduino MEGA, etc.).\n\n## Features\n\nThe joystick or gamepad can have the following features:\n- Buttons (default: 32)\n- Up to 2 Hat Switches\n- X, Y, and/or Z Axis (up to 16-bit precision)\n- X, Y, and/or Z Axis Rotation (up to 16-bit precision)\n- Rudder (up to 16-bit precision)\n- Throttle (up to 16-bit precision)\n- Accelerator (up to 16-bit precision)\n- Brake (up to 16-bit precision)\n- Steering (up to 16-bit precision)\n\n## Installation Instructions\n\nThe following instructions can be used to install the latest version of the library in the Arduino IDE (thanks to [@per1234](https://github.com/per1234) for this update):\n\n1. Download https://github.com/MHeironimus/ArduinoJoystickLibrary/archive/master.zip\n2. In the Arduino IDE, select `Sketch` \u003e `Include Library` \u003e `Add .ZIP Library...`.  Browse to where the downloaded ZIP file is located and click `Open`. The Joystick library's examples will now appear under `File` \u003e `Examples` \u003e `Joystick`.\n\n## Examples\n\n### Simple example\n\n```C++\n#include \u003cJoystick.h\u003e\n\n// Create the Joystick\nJoystick_ Joystick;\n\n// Constant that maps the physical pin to the joystick button.\nconst int pinToButtonMap = 9;\n\nvoid setup() {\n\t// Initialize Button Pins\n\tpinMode(pinToButtonMap, INPUT_PULLUP);\n\n\t// Initialize Joystick Library\n\tJoystick.begin();\n}\n\n// Last state of the button\nint lastButtonState = 0;\n\nvoid loop() {\n\n\t// Read pin values\n\tint currentButtonState = !digitalRead(pinToButtonMap);\n\tif (currentButtonState != lastButtonState)\n\t{\n\tJoystick.setButton(0, currentButtonState);\n\tlastButtonState = currentButtonState;\n\t}\n\n\tdelay(50);\n}\n```\n\n### Included Examples\n\nThe following example Arduino sketch files are included in this library:\n\n#### Simple Samples\n\n- `JoystickButton` - Creates a Joystick and maps pin 9 to button 0 of the joystick, pin 10 to button 1, pin 11 to button 2, and pin 12 to button 3.\n- `JoystickKeyboard` - Creates a Joystick and a Keyboard. Maps pin 9 to Joystick Button 0, pin 10 to Joystick Button 1, pin 11 to Keyboard key 1, and pin 12 to Keyboard key 2.\n- `GamepadExample` - Creates a simple Gamepad with an Up, Down, Left, Right, and Fire button.\n- `FunduinoJoystickShield` - Creates a simple Gamepad using a Funduino Joystick Shield (https://protosupplies.com/product/funduino-joystick-shield-v1-a/).\n- `ArcadeStickExample` - Simple arcade stick example that demonstrates how to read twelve Arduino Pro Micro digital pins and map them to the library (thanks to [@nebhead](https://github.com/nebhead) for this example). NOTE: This sketch is for the Arduino Pro Micro only.\n\n#### Used for Testing\n\n- `JoystickTest` - Simple test of the Joystick library. It exercises many of the Joystick library’s functions when pin A0 is grounded.\n- `MultipleJoystickTest` - Creates 4 Joysticks using the library (each with a slightly different configuration) and exercises the first 16 buttons (if present), the X axis, and the Y axis of each joystick when pin A0 is grounded.\n- `FlightControllerTest` - Creates a Flight Controller and tests 32 buttons, the X and Y axis, the Throttle, and the Rudder when pin A0 is grounded.\n- `HatSwitchTest` - Creates a joystick with two hat switches. Grounding pins 4 - 11 cause the hat switches to change position.\n- `DrivingControllerTest` - Creates a Driving Controller and tests 4 buttons, the Steering, Brake, and Accelerator when pin A0 is grounded.\n\n## Joystick Library API\n\nThe following API is available if the Joystick library in included in a sketch file.\n\n### Joystick\\_(...)\n\nConstructor used to initialize and setup the Joystick. The following optional parameters are available:\n\n- `uint8_t hidReportId` - Default: `0x03` - Indicates the joystick's HID report ID. This value must be unique if you are creating multiple instances of Joystick. Do not use `0x01` or `0x02` as they are used by the built-in Arduino Keyboard and Mouse libraries.\n- `uint8_t joystickType` - Default: `JOYSTICK_TYPE_JOYSTICK` or `0x04` - Indicates the HID input device type. Supported values:\n  - `JOYSTICK_TYPE_JOYSTICK` or `0x04` - Joystick \n  - `JOYSTICK_TYPE_GAMEPAD` or `0x05` - Gamepad\n  - `JOYSTICK_TYPE_MULTI_AXIS` or `0x08` - Multi-axis Controller \n- `uint8_t buttonCount` - Default: `32` - Indicates how many buttons will be available on the joystick.\n- `uint8_t hatSwitchCount` - Default: `2` - Indicates how many hat switches will be available on the joystick. Range: `0` - `2`\n- `bool includeXAxis` - Default: `true` - Indicates if the X Axis is available on the joystick.\n- `bool includeYAxis` - Default: `true` - Indicates if the Y Axis is available on the joystick.\n- `bool includeZAxis` - Default: `true` - Indicates if the Z Axis (in some situations this is the right X Axis) is available on the joystick.\n- `bool includeRxAxis` - Default: `true` - Indicates if the X Axis Rotation (in some situations this is the right Y Axis) is available on the joystick.\n- `bool includeRyAxis` - Default: `true` - Indicates if the Y Axis Rotation is available on the joystick.\n- `bool includeRzAxis` - Default: `true` - Indicates if the Z Axis Rotation is available on the joystick.\n- `bool includeRudder` - Default: `true` - Indicates if the Rudder is available on the joystick.\n- `bool includeThrottle` - Default: `true` - Indicates if the Throttle is available on the joystick.\n- `bool includeAccelerator` - Default: `true` - Indicates if the Accelerator is available on the joystick.\n- `bool includeBrake` - Default: `true` - Indicates if the Brake is available on the joystick.\n- `bool includeSteering` - Default: `true` - Indicates if the Steering is available on the joystick.\n\nThe following constants define the default values for the constructor parameters listed above:\n\n- `JOYSTICK_DEFAULT_REPORT_ID` is set to `0x03`\n- `JOYSTICK_DEFAULT_BUTTON_COUNT` is set to `32`\n- `JOYSTICK_DEFAULT_HATSWITCH_COUNT` is set to `2`\n\n### Joystick.begin(bool initAutoSendState)\n\nStarts emulating a game controller connected to a computer. By default, all methods update the game controller state immediately. If `initAutoSendState` is set to `false`, the `Joystick.sendState` method must be called to update the game controller state.\n\n### Joystick.end()\n\nStops the game controller emulation to a connected computer (Note: just like the Arduino `Keyboard.h` and `Mouse.h` libraries, the `end()` function does not actually do anything).\n\n### Joystick.setXAxisRange(int32_t minimum, int32_t maximum)\n\nSets the range of values that will be used for the X axis. Default: `0` to `1023`\n\n### Joystick.setXAxis(int32_t value)\n\nSets the X axis value. See `setXAxisRange` for the range.\n\n### Joystick.setYAxisRange(int32_t minimum, int32_t maximum)\n\nSets the range of values that will be used for the Y axis. Default: `0` to `1023`\n\n### Joystick.setYAxis(int32_t value)\n\nSets the Y axis value. See `setYAxisRange` for the range.\n\n### Joystick.setZAxisRange(int32_t minimum, int32_t maximum)\n\nSets the range of values that will be used for the Z axis. Default: `0` to `1023`\n\n### Joystick.setZAxis(int32_t value)\n\nSets the Z axis value. See `setZAxisRange` for the range.\n\n### Joystick.setRxAxisRange(int32_t minimum, int32_t maximum)\n\nSets the range of values that will be used for the X axis rotation. Default: `0` to `1023`\n\n### Joystick.setRxAxis(int32_t value)\n\nSets the X axis rotation value. See `setRxAxisRange` for the range.\n\n### Joystick.setRyAxisRange(int32_t minimum, int32_t maximum)\n\nSets the range of values that will be used for the Y axis rotation. Default: `0` to `1023`\n\n### Joystick.setRyAxis(int32_t value)\n\nSets the Y axis rotation value. See `setRyAxisRange` for the range.\n\n### Joystick.setRzAxisRange(int32_t minimum, int32_t maximum)\n\nSets the range of values that will be used for the Z axis rotation. Default: `0` to `1023`\n\n### Joystick.setRzAxis(int32_t value)\n\nSets the Z axis rotation value. See `setRzAxisRange` for the range.\n\n### Joystick.setRudderRange(int32_t minimum, int32_t maximum)\n\nSets the range of values that will be used for the Rudder. Default: `0` to `1023`\n\n### Joystick.setRudder(int32_t value)\n\nSets the Rudder value. See `setRudderRange` for the range.\n\n### Joystick.setThrottleRange(int32_t minimum, int32_t maximum)\n\nSets the range of values that will be used for the Throttle. Default: `0` to `1023`\n\n### Joystick.setThrottle(int32_t value)\n\nSets the Throttle value. See `setThrottleRange` for the range.\n\n### Joystick.setAcceleratorRange(int32_t minimum, int32_t maximum)\n\nSets the range of values that will be used for the Accelerator. Default: `0` to `1023`\n\n### Joystick.setAccelerator(int32_t value)\n\nSets the Accelerator value. See `setAcceleratorRange` for the range.\n\n### Joystick.setBrakeRange(int32_t minimum, int32_t maximum)\n\nSets the range of values that will be used for the Brake. Default: `0` to `1023`\n\n### Joystick.setBrake(int32_t value)\n\nSets the Brake value. See `setBrakeRange` for the range.\n\n### Joystick.setSteeringRange(int32_t minimum, int32_t maximum)\n\nSets the range of values that will be used for the Steering. Default: `0` to `1023`\n\n### Joystick.setSteering(int32_t value)\n\nSets the Steering value. See `setSteeringRange` for the range.\n\n### Joystick.setButton(uint8_t button, uint8_t value)\n\nSets the state (`0` or `1`) of the specified button (range: `0` - (`buttonCount - 1`)). The button is the 0-based button number (i.e. button #1 is `0`, button #2 is `1`, etc.). The value is `1` if the button is pressed and `0` if the button is released.\n\n### Joystick.pressButton(uint8_t button)\n\nPress the indicated button (range: `0` - (`buttonCount - 1`)). The button is the 0-based button number (i.e. button #1 is `0`, button #2 is `1`, etc.).\n\n### Joystick.releaseButton(uint8_t button)\n\nRelease the indicated button (range: `0` - (`buttonCount - 1`)). The button is the 0-based button number (i.e. button #1 is `0`, button #2 is `1`, etc.).\n\n### Joystick.setHatSwitch(int8_t hatSwitch, int16_t value)\n\nSets the value of the specified hat switch. The hatSwitch is 0-based (i.e. hat switch #1 is `0` and hat switch #2 is `1`). The value is from 0° to 360°, but in 45° increments. Any value less than 45° will be rounded down (i.e. 44° is rounded down to 0°, 89° is rounded down to 45°, etc.). Set the value to `JOYSTICK_HATSWITCH_RELEASE` or `-1` to release the hat switch.\n\n### Joystick.sendState()\n\nSends the updated joystick state to the host computer. Only needs to be called if `AutoSendState` is `false` (see `Joystick.begin` for more details).\n\nSee the [Wiki](https://github.com/MHeironimus/ArduinoJoystickLibrary/wiki) for more details on things like FAQ, supported boards, testing, etc.\n","funding_links":[],"categories":["C++","硬件_其他"],"sub_categories":["资源传输下载"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMHeironimus%2FArduinoJoystickLibrary","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FMHeironimus%2FArduinoJoystickLibrary","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMHeironimus%2FArduinoJoystickLibrary/lists"}