mirror of https://github.com/OpenIPC/wiki.git
92 lines
2.3 KiB
C++
92 lines
2.3 KiB
C++
// Simple gamepad example that demonstraits how to read five Arduino
|
|
// digital pins and map them to the Arduino Joystick library.
|
|
//
|
|
// The digital pins 2 - 6 are grounded when they are pressed.
|
|
// Pin 2 = UP
|
|
// Pin 3 = RIGHT
|
|
// Pin 4 = DOWN
|
|
// Pin 5 = LEFT
|
|
// Pin 6 = FIRE
|
|
//
|
|
// NOTE: This sketch file is for use with Arduino Leonardo and
|
|
// Arduino Micro only.
|
|
//
|
|
// by Matthew Heironimus
|
|
// 2016-11-24
|
|
//--------------------------------------------------------------------
|
|
|
|
#include <Joystick.h>
|
|
|
|
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,JOYSTICK_TYPE_GAMEPAD,
|
|
1, 0, // Button Count, Hat Switch Count
|
|
true, true, false, // X and Y, but no Z Axis
|
|
false, false, false, // No Rx, Ry, or Rz
|
|
false, false, // No rudder or throttle
|
|
false, false, false); // No accelerator, brake, or steering
|
|
|
|
void setup() {
|
|
// Initialize Button Pins
|
|
pinMode(2, INPUT_PULLUP);
|
|
pinMode(3, INPUT_PULLUP);
|
|
pinMode(4, INPUT_PULLUP);
|
|
pinMode(5, INPUT_PULLUP);
|
|
pinMode(6, INPUT_PULLUP);
|
|
|
|
// Initialize Joystick Library
|
|
Joystick.begin();
|
|
Joystick.setXAxisRange(-1, 1);
|
|
Joystick.setYAxisRange(-1, 1);
|
|
}
|
|
|
|
// Last state of the buttons
|
|
int lastButtonState[5] = {0,0,0,0,0};
|
|
|
|
void loop() {
|
|
|
|
// Read pin values
|
|
for (int index = 0; index < 5; index++)
|
|
{
|
|
int currentButtonState = !digitalRead(index + 2);
|
|
if (currentButtonState != lastButtonState[index])
|
|
{
|
|
switch (index) {
|
|
case 0: // UP
|
|
if (currentButtonState == 1) {
|
|
Joystick.setYAxis(-1);
|
|
} else {
|
|
Joystick.setYAxis(0);
|
|
}
|
|
break;
|
|
case 1: // RIGHT
|
|
if (currentButtonState == 1) {
|
|
Joystick.setXAxis(1);
|
|
} else {
|
|
Joystick.setXAxis(0);
|
|
}
|
|
break;
|
|
case 2: // DOWN
|
|
if (currentButtonState == 1) {
|
|
Joystick.setYAxis(1);
|
|
} else {
|
|
Joystick.setYAxis(0);
|
|
}
|
|
break;
|
|
case 3: // LEFT
|
|
if (currentButtonState == 1) {
|
|
Joystick.setXAxis(-1);
|
|
} else {
|
|
Joystick.setXAxis(0);
|
|
}
|
|
break;
|
|
case 4: // FIRE
|
|
Joystick.setButton(0, currentButtonState);
|
|
break;
|
|
}
|
|
lastButtonState[index] = currentButtonState;
|
|
}
|
|
}
|
|
|
|
delay(10);
|
|
}
|
|
|