Testing if Teensy can be a Joystick and a Keyboard.. as some game emulators expect joystick commands as default, but require keyboard keys also. Handy in installation environment.
/* Basic USB Joystick Example
GPIO 0 Keyboard - F1
GPIO 1 Keyboard - F3
GPIO 2 Keyboard - F5
GPIO 3 Joystick -X
GPIO 4 Joystick +X
GPIO 5 Joystick -Y
GPIO 6 Joystick +Y
GPIO 7 Joystick Button 1 FIRE
Set Teensy 3.2 to be Serial/Joystick/Host.
*/
#include <Bounce.h>
// Create Bounce objects for each button. The Bounce object
// automatically deals with contact chatter or "bounce", and
// it makes detecting changes very simple.
Bounce button0 = Bounce(0, 10); // F1
Bounce button1 = Bounce(1, 10); // F3 10 = 10 ms debounce time
Bounce button2 = Bounce(2, 10); // F5 which is appropriate for
int ledPin = 13;
const int joystick_X_neg_pin = 3;
const int joystick_X_pos_pin = 4;
const int joystick_Y_neg_pin = 5;
const int joystick_Y_pos_pin = 6;
const int joystick_fire_pin = 7;
void setup() {
pinMode(0, INPUT_PULLUP);
pinMode(1, INPUT_PULLUP);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP); // Teensy++ LED, may need 1k resistor pullup
pinMode(7, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
Serial.println("... Setup ... ");
}
void loop() {
// Update all the buttons for the keyboard. There should not be any long
// delays in loop(), so this runs repetitively at a rate
// faster than the buttons could be pressed and released.
button0.update(); // F1 Start
button1.update(); // F3 1/2 Player
button2.update(); // F5 Restart
// Check each button for "falling" edge.
if (button0.fallingEdge()) {
Keyboard.press(KEY_F1); // Button 0 = F1 = Start Game
delay(10);
Keyboard.release(KEY_F1);
}
if (button1.fallingEdge()) {
Keyboard.press(KEY_F3); // Button 1 = F3 = 1 Player / 2 Player
delay(10);
Keyboard.release(KEY_F3);
}
if (button2.fallingEdge()) {
Keyboard.press(KEY_F5); // Button 2 = F5 = Restart Game
delay(10);
Keyboard.release(KEY_F5);
}
if (digitalRead(joystick_X_neg_pin) == LOW)
{
Joystick.X(0); // Min X
} else if (digitalRead(joystick_X_pos_pin) == LOW)
{
Joystick.X(1023); // Max X
} else {
Joystick.X(512); // X Centred
}
if (digitalRead(joystick_Y_neg_pin) == LOW)
{
Joystick.Y(1023); // Y Max
} else if (digitalRead(joystick_Y_pos_pin) == LOW)
{
Joystick.Y(0); // Y Min
} else {
Joystick.Y(512); // Y Centred
}
if (digitalRead(joystick_fire_pin) == LOW) {
Joystick.button(1, HIGH); // Button 1 = FIRE High
delay(10);
} else {
Joystick.button(1, LOW); // Button 1 = FIRE Low
}
delay(50); // a brief delay
}




