diff --git a/libraries/USB/examples/Gamepad/Gamepad.ino b/libraries/USB/examples/Gamepad/Gamepad.ino index dad75723797..fa2a2a3bc6f 100644 --- a/libraries/USB/examples/Gamepad/Gamepad.ino +++ b/libraries/USB/examples/Gamepad/Gamepad.ino @@ -14,13 +14,41 @@ void setup() { pinMode(buttonPin, INPUT_PULLUP); Gamepad.begin(); USB.begin(); + Serial.begin(115200); + Serial.println("\n==================\nUSB Gamepad Testing\n==================\n"); + Serial.println("Press BOOT Button to activate the USB gamepad."); + Serial.println("Longer press will change the affected button and controls."); + Serial.println("Shorter press/release just activates the button and controls."); } void loop() { + static uint8_t padID = 0; + static long lastPress = 0; + int buttonState = digitalRead(buttonPin); - if ((buttonState != previousButtonState) && (buttonState == LOW)) { - Gamepad.pressButton(BUTTON_START); - Gamepad.releaseButton(BUTTON_START); + if (buttonState != previousButtonState) { + if (buttonState == LOW) { // BOOT Button pressed + Gamepad.pressButton(padID); // Buttons 1 to 32 + Gamepad.leftStick(padID << 3, padID << 3); // X Axis, Y Axis + Gamepad.rightStick(-(padID << 2), padID << 2); // Z Axis, Z Rotation + Gamepad.leftTrigger(padID << 4); // X Rotation + Gamepad.rightTrigger(-(padID << 4)); // Y Rotation + Gamepad.hat((padID & 0x7) + 1); // Point of View Hat + log_d("Pressed PadID [%d]", padID); + lastPress = millis(); + } else { + Gamepad.releaseButton(padID); + Gamepad.leftStick(0, 0); + Gamepad.rightStick(0, 0); + Gamepad.leftTrigger(0); + Gamepad.rightTrigger(0); + Gamepad.hat(HAT_CENTER); + log_d("Released PadID [%d]\n", padID); + if (millis() - lastPress > 300) { + padID = (padID + 1) & 0x1F; + log_d("Changed padID to %d\n", padID); + } + } } previousButtonState = buttonState; }