From c42371fa7d5573b5aa3762913b4cd826c697c2ec Mon Sep 17 00:00:00 2001 From: DAProgs Date: Wed, 14 Jan 2026 14:21:23 -0500 Subject: [PATCH] Upload files to "libraries/ArduinoJoystickLibrary/examples/MultipleJoystickTest" --- .../MultipleJoystickTest.ino | 180 ++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 libraries/ArduinoJoystickLibrary/examples/MultipleJoystickTest/MultipleJoystickTest.ino diff --git a/libraries/ArduinoJoystickLibrary/examples/MultipleJoystickTest/MultipleJoystickTest.ino b/libraries/ArduinoJoystickLibrary/examples/MultipleJoystickTest/MultipleJoystickTest.ino new file mode 100644 index 0000000..60735c1 --- /dev/null +++ b/libraries/ArduinoJoystickLibrary/examples/MultipleJoystickTest/MultipleJoystickTest.ino @@ -0,0 +1,180 @@ +// Program used to test using the Arduino Joystick Library +// to create multiple Joystick objects on a single Arduino +// Leonardo or Arduino Micro. +// +// Each joystick has a unique configuration. +// +// Matthew Heironimus +// 2016-05-13 - Original Version +// 2022-03-29 - Updated to work with Joystick Library v2.1.0 +//------------------------------------------------------------ +#include + +#define JOYSTICK_COUNT 4 + +Joystick_ Joystick[JOYSTICK_COUNT] = { + Joystick_(0x03, JOYSTICK_TYPE_JOYSTICK, 4, 2, true, true, false, false, false, false, false, false, false, false, false), + Joystick_(0x04, JOYSTICK_TYPE_JOYSTICK, 8, 1, true, true, true, true, false, false, false, false, false, false, false), + Joystick_(0x05, JOYSTICK_TYPE_JOYSTICK, 16, 0, false, true, false, true, false, false, true, true, false, false, false), + Joystick_(0x06, JOYSTICK_TYPE_JOYSTICK, 32, 1, true, true, false, true, true, false, false, false, false, false, false) +}; + +// Set to true to test "Auto Send" mode or false to test "Manual Send" mode. +//const bool testAutoSendMode = true; +const bool testAutoSendMode = false; + +const unsigned long gcCycleDelta = 1000; +const unsigned long gcAnalogDelta = 25; +const unsigned long gcButtonDelta = 500; +unsigned long gNextTime = 0; +unsigned int gCurrentStep = 0; +int gJoystickId = 0; + +void testSingleButtonPush(int joystickId, unsigned int button) +{ + if (button > 0) + { + Joystick[joystickId].releaseButton(button - 1); + } + if (button < 16) + { + Joystick[joystickId].pressButton(button); + } +} + +void testMultiButtonPush(int joystickId, unsigned int currentStep) +{ + for (int button = 0; button < 16; button++) + { + if ((currentStep == 0) || (currentStep == 2)) + { + if ((button % 2) == 0) + { + Joystick[joystickId].pressButton(button); + } else if (currentStep != 2) + { + Joystick[joystickId].releaseButton(button); + } + } // if ((currentStep == 0) || (currentStep == 2)) + if ((currentStep == 1) || (currentStep == 2)) + { + if ((button % 2) != 0) + { + Joystick[joystickId].pressButton(button); + } else if (currentStep != 2) + { + Joystick[joystickId].releaseButton(button); + } + } // if ((currentStep == 1) || (currentStep == 2)) + if (currentStep == 3) + { + Joystick[joystickId].releaseButton(button); + } // if (currentStep == 3) + } // for (int button = 0; button < 32; button++) +} + +void testXYAxis(int joystickId, unsigned int currentStep) +{ + int x; + int y; + + if (currentStep < 255) + { + x = currentStep - 127; + y = -127; + } + else if (currentStep < 510) + { + x = 127; + y = currentStep - 255 - 127; + } + else if (currentStep < 765) + { + x = 127 - (currentStep - 510); + y = 127; + } + else if (currentStep < 1020) + { + x = -127; + y = 127 - (currentStep - 765); + } + else if (currentStep <= 1020 + 127) + { + x = currentStep - 1020 - 127; + y = currentStep - 1020 - 127; + } + + Joystick[joystickId].setXAxis(x); + Joystick[joystickId].setYAxis(y); +} + +void setup() { + + for (int index = 0; index < JOYSTICK_COUNT; index++) + { + Joystick[index].setXAxisRange(-127, 127); + Joystick[index].setYAxisRange(-127, 127); + + if (testAutoSendMode) + { + Joystick[index].begin(); + } + else + { + Joystick[index].begin(false); + } + } + + pinMode(A0, INPUT_PULLUP); + pinMode(LED_BUILTIN, OUTPUT); +} + +void loop() { + + // System Disabled + if (digitalRead(A0) != 0) + { + digitalWrite(LED_BUILTIN, 0); + return; + } + + // Turn indicator light on. + digitalWrite(LED_BUILTIN, 1); + + if (millis() >= gNextTime) + { + + if (gCurrentStep < 17) + { + gNextTime = millis() + gcButtonDelta; + testSingleButtonPush(gJoystickId, gCurrentStep); + } + else if (gCurrentStep < (17 + 4)) + { + gNextTime = millis() + gcButtonDelta; + testMultiButtonPush(gJoystickId, gCurrentStep - 17); + } + else if (gCurrentStep < (17 + 4 + 1024 + 128)) + { + gNextTime = millis() + gcAnalogDelta; + testXYAxis(gJoystickId, gCurrentStep - (17 + 4)); + } + + if (testAutoSendMode == false) + { + Joystick[gJoystickId].sendState(); + } + + gCurrentStep++; + if (gCurrentStep == (17 + 4 + 1024 + 128)) + { + gNextTime = millis() + gcCycleDelta; + gCurrentStep = 0; + + if (++gJoystickId >= JOYSTICK_COUNT) + { + gJoystickId = 0; + } + } + } +}