HID/examples/Gamepad/Gamepad.ino
2015-10-11 11:11:34 +02:00

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);
}
}