|
ARDUINO MICRO WITH HEADERS |
x 1 | |
|
1301.9302SCHURTER INC.
|
x 7 |
|
Autodesk Fusion 360Autodesk
|
|
|
Soldering iron (generic) |
|
|
KiCad 8.0KiCad
|
UFO 50 SNES Style Controller
I wanted to make a controller in the style of the UFO 50 controller to try and learn KiCad for the first time. The KiCad side was very easy, but 3D printing buttons that felt any good was kind of a hassle! I also wanted it all to fit together with friction and not require any screws to attach anything. I don't know why I wanted this, I just thought it would be fun.
In order to get the look right from the UFO 50 reference images, I had to reduce the indent on top and print a face plate in a different colour. If you have a multicolour printer you can probably do this much better by using that.
Be very careful when removing the buttons from the print bed as the spring is very delicate when removing supports. It seems pretty good when in use and the supported parts are all hidden from view so the fact that the supports don't come off cleanly is not a concern.
If anyone has any suggestions for how to make the buttons feel better please let me know!
Assmebly Instructions:
- Solder all 7 switches to appropriate place on board.
- Solder female headers to the Arduino section of the board and male headers onto Arduino Pro Micro with long side facing down.
- Arduino code uses Xinput library which requires some extra steps for programming - info can be found here and here
- Align board with alignment posts in the corners of the bottom half
- Put 3D printed buttons onto the relevant buttons on the board
- Squeeze the top half of the print over the top of everything and guide the buttons through the holes on the top half. This part is easiest if you align the USB-C on the Arduino with the relevant hole first and use that as a guide.
- Click together.
- Play UFO50!!!!
#include <XInput.h>
const int DPADUP_PIN = 2;
const int DPADRIGHT_PIN = 3;
const int DPADDOWN_PIN = 4;
const int DPADLEFT_PIN = 5;
const int A_PIN = 16;
const int B_PIN = 14;
const int START_PIN = 10;
void setup() {
//Serial.begin(9600);
XInput.begin();
pinMode(DPADUP_PIN, INPUT_PULLUP);
pinMode(DPADRIGHT_PIN, INPUT_PULLUP);
pinMode(DPADDOWN_PIN, INPUT_PULLUP);
pinMode(DPADLEFT_PIN, INPUT_PULLUP);
pinMode(A_PIN, INPUT_PULLUP);
pinMode(B_PIN, INPUT_PULLUP);
pinMode(START_PIN, INPUT_PULLUP);
pinMode(LED_BUILTIN_TX,INPUT); // disable red led
pinMode(LED_BUILTIN_RX,INPUT); // disable red led
}
void loop() {
//if(digitalRead(DPADUP_PIN) == LOW) { Serial.println("Pressing DPAD UP"); }
//if(digitalRead(DPADRIGHT_PIN) == LOW) { Serial.println("Pressing DPAD RIGHT"); }
//if(digitalRead(DPADDOWN_PIN) == LOW) { Serial.println("Pressing DPAD DOWN"); }
//if(digitalRead(DPADLEFT_PIN) == LOW) { Serial.println("Pressing DPAD LEFT"); }
//if(digitalRead(A_PIN) == LOW) { Serial.println("Pressing A"); }
//if(digitalRead(B_PIN) == LOW) { Serial.println("Pressing B"); }
boolean dpadUp = !digitalRead(DPADUP_PIN);
boolean dpadRight = !digitalRead(DPADRIGHT_PIN);
boolean dpadLeft = !digitalRead(DPADLEFT_PIN);
boolean dpadDown = !digitalRead(DPADDOWN_PIN);
boolean buttonA = !digitalRead(A_PIN);
boolean buttonB = !digitalRead(B_PIN);
boolean buttonStart = !digitalRead(START_PIN);
XInput.setButton(BUTTON_A, buttonA);
XInput.setButton(BUTTON_B, buttonB);
XInput.setButton(BUTTON_START, buttonStart);
XInput.setDpad(dpadUp, dpadDown, dpadLeft, dpadRight);
XInput.send();
}
UFO 50 SNES Style Controller
*PCBWay community is a sharing platform. We are not responsible for any design issues and parameter issues (board thickness, surface finish, etc.) you choose.
- Comments(0)
- Likes(0)
- 0 USER VOTES
- YOUR VOTE 0.00 0.00
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
More by James Barrett
-
-
DIY Fiber Laser Tube Cutting Machine
69 0 1 -
-
-
DIY Transistor Tester | Build Your Own LCR Meter at Home with Arduino Nano
230 0 2 -
-
-
ESP32-S3 breakout board for motorizing Iron Man helmets
222 0 2