banjokazooie wrote: ↑Sun Oct 09, 2016 11:14 am
Teensy Update:
For better analog input in N64 games change any instances of 1.8 like in here " rX = (rX - 512) * 1.8 + 512; " to 1.5.
The analog range is going to be shorter hence joystick is not so sensitive. Retropie is still able to register analog on setup screen but unfortunately you will loose analog movement in psx games. Crash bandicoot is not running anymore
Added ESC key for home button to teensy code.
Teensy Update 2:
Home button action modified to switch between Joystick and Keyboard. Now usable in Amiga emulator. Joystick buttons reassigned to match actual wiring.
Code: Select all
const int MODE = 15; // the pin that the pushbutton is attached to const int LED = 11; int buttonPushCounter = 0; // counter for the number of button presses int buttonState = 0; // current state of the button int lastButtonState = 0; void setup() { pinMode(0, INPUT_PULLUP); // 01 Left Shoulder pinMode(1, INPUT_PULLUP); // 02 Lelf Trigger pinMode(2, INPUT_PULLUP); // 03 Right pinMode(3, INPUT_PULLUP); // 04 Left pinMode(4, INPUT_PULLUP); // 05 Up pinMode(5, INPUT_PULLUP); // 06 Down pinMode(6, INPUT_PULLUP); // 07 B pinMode(7, INPUT_PULLUP); // 08 A pinMode(8, INPUT_PULLUP); // 09 Right Trigger pinMode(LED, OUTPUT); // LED pinMode(12, INPUT_PULLUP); // 13 Start pinMode(13, INPUT_PULLUP); // 14 Select pinMode(14, INPUT_PULLUP); // 15 Y pinMode(MODE, INPUT_PULLUP); // HOME Button pinMode(18, INPUT_PULLUP); // 19 Left Joystick Button pinMode(19, INPUT_PULLUP); // 20 Right Joystick Button pinMode(22, INPUT_PULLUP); // 23 Right Shoulder pinMode(23, INPUT_PULLUP); // 24 X // Serial.begin(9600); } void loop_joystick() { if (digitalRead(0) == LOW) { Joystick.button(1, 1); } else { Joystick.button(1, 0); } if (digitalRead(1) == LOW) { Joystick.button(2, 1); } else { Joystick.button(2, 0); } if (digitalRead(2) == LOW) { Joystick.button(3, 1); } else { Joystick.button(3, 0); } if (digitalRead(3) == LOW) { Joystick.button(4, 1); } else { Joystick.button(4, 0); } if (digitalRead(4) == LOW) { Joystick.button(5, 1); } else { Joystick.button(5, 0); } if (digitalRead(5) == LOW) { Joystick.button(6, 1); } else { Joystick.button(6, 0); } if (digitalRead(6) == LOW) { Joystick.button(7, 1); } else { Joystick.button(7, 0); } if (digitalRead(7) == LOW) { Joystick.button(8, 1); } else { Joystick.button(8, 0); } if (digitalRead(8) == LOW) { Joystick.button(9, 1); } else { Joystick.button(9, 0); } if (digitalRead(12) == LOW) { Joystick.button(13, 1); } else { Joystick.button(13, 0); } if (digitalRead(13) == LOW) { Joystick.button(14, 1); } else { Joystick.button(14, 0); } if (digitalRead(14) == LOW) { Joystick.button(15, 1); } else { Joystick.button(15, 0); } if (digitalRead(18) == LOW) { Joystick.button(19, 1); } else { Joystick.button(19, 0); } if (digitalRead(19) == LOW) { Joystick.button(20, 1); } else { Joystick.button(20, 0); } if (digitalRead(22) == LOW) { Joystick.button(23, 1); } else { Joystick.button(23, 0); } if (digitalRead(23) == LOW) { Joystick.button(24, 1); } else { Joystick.button(24, 0); } int rX = analogRead(4); rX = (rX - 512) * 1.5 + 512; if (rX > 1023) rX=1023; if (rX < 0) rX = 0; int rY = analogRead(5); rY = (rY - 512) * 1.5 + 512; if (rY > 1023) rY=1023; if (rY < 0) rY = 0; rY=abs(1023-rY); int rL = analogRead(0); rL = (rL - 512) * 1.5 + 512; if (rL > 1023) rL=1023; if (rL < 0) rL = 0; int rR = analogRead(1); rR = (rR - 512) * 1.5 + 512; if (rR > 1023) rR=1023; if (rR < 0) rR = 0; //rR=abs(1023-rR); Joystick.X(rX); Joystick.Y(rY); Joystick.sliderLeft(rL); Joystick.sliderRight(rR); } void loop_keyboard() { if (digitalRead(4) == LOW) { Keyboard.press(KEY_UP); } else { Keyboard.release(KEY_UP); } if (digitalRead(5) == LOW) { Keyboard.press(KEY_DOWN); } else { Keyboard.release(KEY_DOWN); } if (digitalRead(3) == LOW) { Keyboard.press(KEY_LEFT); } else { Keyboard.release(KEY_LEFT); } if (digitalRead(2) == LOW) { Keyboard.press(KEY_RIGHT); } else { Keyboard.release(KEY_RIGHT); } //buttons if (digitalRead(0) == LOW) { Keyboard.press(KEY_ENTER); } else { Keyboard.release(KEY_ENTER); } if (digitalRead(1) == LOW) { Keyboard.press(KEY_ESC); } else { Keyboard.release(KEY_ESC); } if (digitalRead(22) == LOW) { Keyboard.press(KEY_LEFT_CTRL); } else { Keyboard.release(KEY_LEFT_CTRL); } if (digitalRead(8) == LOW) { Keyboard.press(KEY_LEFT_ALT); } else { Keyboard.release(KEY_LEFT_ALT); } if (digitalRead(7) == LOW) { Keyboard.press(KEY_A); } else { Keyboard.release(KEY_A); } if (digitalRead(6) == LOW) { Keyboard.press(KEY_B); } else { Keyboard.release(KEY_B); } if (digitalRead(14) == LOW) { Keyboard.press(KEY_Y); } else { Keyboard.release(KEY_Y); } if (digitalRead(23) == LOW) { Keyboard.press(KEY_X); } else { Keyboard.release(KEY_X); } if (digitalRead(12) == LOW) { Keyboard.press(KEY_F12); } else { Keyboard.release(KEY_F12); } if (digitalRead(13) == LOW) { Keyboard.press(KEYPAD_5); } else { Keyboard.release(KEYPAD_5); } } void loop() { buttonState = digitalRead(MODE); if (buttonState != lastButtonState) { if (buttonState == HIGH) { buttonPushCounter++; // Serial.println("on"); // Serial.print("number of button pushes: "); // Serial.println(buttonPushCounter); } else { // Serial.println("off"); } } lastButtonState = buttonState; if (buttonPushCounter % 2 == 0) { digitalWrite(LED, HIGH); } else { digitalWrite(LED, LOW); } if (digitalRead(LED) == LOW) { loop_joystick(); } else { loop_keyboard(); } }
banjokazooie wrote: ↑Sat Nov 17, 2018 2:26 pmESC key was used in wii u with windows to get out from any fullscreen app. For retropie build home button switches between joystick and keyboard in troublesome emulators. The setting for teensy looks about right.
I may have missed it.....
but what are the actual keyboard buttons on the Wii U gamepad, when the home button is press....
what does what on the Wii U gamepad (which button press = which keyboard press)
is there a list?
(as a NOOB like me will most probably get things wrong if trying to decipher it pout of the script)
Thanks
.