66 lines
1.5 KiB
C++
66 lines
1.5 KiB
C++
/*
|
|
Copyright (c) 2014-2015 NicoHood
|
|
See the readme for credit to other people.
|
|
|
|
Gamepad example
|
|
Press a button and demonstrate Gamepad actions
|
|
|
|
You can also use Gamepad1,2,3 and 4 as single report.
|
|
This will use 1 endpoint for each gamepad.
|
|
|
|
See HID Project documentation for more infos
|
|
https://github.com/NicoHood/HID/wiki/Gamepad-API
|
|
*/
|
|
|
|
#include "HID-Project.h"
|
|
|
|
const int pinLed = LED_BUILTIN;
|
|
const int pinButton = 2;
|
|
|
|
void setup() {
|
|
pinMode(pinLed, OUTPUT);
|
|
pinMode(pinButton, INPUT_PULLUP);
|
|
|
|
// Sends a clean report to the host. This is important on any Arduino type.
|
|
Gamepad.begin();
|
|
}
|
|
|
|
void loop() {
|
|
if (!digitalRead(pinButton)) {
|
|
digitalWrite(pinLed, HIGH);
|
|
|
|
// Press button 1-32
|
|
static uint8_t count = 0;
|
|
count++;
|
|
if (count == 33) {
|
|
Gamepad.releaseAll();
|
|
count = 0;
|
|
}
|
|
else
|
|
Gamepad.press(count);
|
|
|
|
// Move x/y Axis to a new position (16bit)
|
|
Gamepad.xAxis(random(0xFFFF));
|
|
Gamepad.yAxis(random(0xFFFF));
|
|
|
|
// Go through all dPad positions
|
|
// values: 0-8 (0==centered)
|
|
static uint8_t dpad1 = GAMEPAD_DPAD_CENTERED;
|
|
Gamepad.dPad1(dpad1++);
|
|
if (dpad1 > GAMEPAD_DPAD_UP_LEFT)
|
|
dpad1 = GAMEPAD_DPAD_CENTERED;
|
|
|
|
static int8_t dpad2 = GAMEPAD_DPAD_CENTERED;
|
|
Gamepad.dPad2(dpad2--);
|
|
if (dpad2 < GAMEPAD_DPAD_CENTERED)
|
|
dpad2 = GAMEPAD_DPAD_UP_LEFT;
|
|
|
|
// Functions above only set the values.
|
|
// This writes the report to the host.
|
|
Gamepad.write();
|
|
|
|
// Simple debounce
|
|
delay(300);
|
|
digitalWrite(pinLed, LOW);
|
|
}
|
|
}
|