Introduction
Ever wanted to create your own handheld retro gaming device?
In this guide, we'll walk you through on how to create your own with the Raspberry Pi Zero W, a Teensy 2.0 microcontroller, soft tactile push buttons, a 3.7V 2500mAh LiPo battery, and a Powerboost 1000C.Â
Complete this guide to get started with creating your very own DIY portable gaming console.
Tools
- PowerBoost 1000 Charger - Rechargeable 5V Lipo USB Boost @ 1A [1000C]
- 3.7v 2500mAh Li-battery
- Teensy (ATmega32u4 USB dev board) 2.0 [ATmega32u4]
- Soft Tactile Button (8mm) x 10
- Multifunctional Automatic Wire Stripper
- Hakko RED Soldering Iron 60W
- Jumper Wire Kit
- Mini Pushbutton Switch long legs
- Raspberry Pi Zero WH - with soldered headers
- ProtoBoard Pro-Double Sided
- Breadboard-friendly SPDT Slide Switch
- PiTFT Plus 480x320 3.5 TFT+Touchscreen for Raspberry Pi
-
-
-
-
-
-
-
-
-
-
-
-
-
#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(2, 10); Bounce button1 = Bounce(3, 10); // 10 = 10 ms debounce time Bounce button2 = Bounce(4, 10); // which is appropriate for Bounce button3 = Bounce(5, 10); // most mechanical pushbuttons Bounce button4 = Bounce(14, 10); Bounce button5 = Bounce(15, 10); Bounce button6 = Bounce(16, 10); Bounce button7 = Bounce(17, 10); Bounce button8 = Bounce(18, 10); Bounce button9 = Bounce(19, 10); Bounce button10 = Bounce(12, 10); Bounce button11 = Bounce(13, 10); void setup() { // Configure the pins for input mode with pullup resistors. // The pushbuttons connect from each pin to ground. When // the button is pressed, the pin reads LOW because the button // shorts it to ground. When released, the pin reads HIGH // because the pullup resistor connects to +5 volts inside // the chip. LOW for "on", and HIGH for "off" may seem // backwards, but using the on-chip pullup resistors is very // convenient. The scheme is called "active low", and it's // very commonly used in electronics... so much that the chip // has built-in pullup resistors! pinMode(2, INPUT_PULLUP); pinMode(3, INPUT_PULLUP); pinMode(4, INPUT_PULLUP); pinMode(5, INPUT_PULLUP); pinMode(14, INPUT_PULLUP); pinMode(15, INPUT_PULLUP); pinMode(16, INPUT_PULLUP); // Teensy++ LED, may need 1k resistor pullup pinMode(17, INPUT_PULLUP); pinMode(18, INPUT_PULLUP); pinMode(19, INPUT_PULLUP); pinMode(12, INPUT_PULLUP); pinMode(13, INPUT_PULLUP); } void loop() { // Update all the buttons. 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(); button1.update(); button2.update(); button3.update(); button4.update(); button5.update(); button6.update(); button7.update(); button8.update(); button9.update(); button10.update(); button11.update(); // Check each button for "falling" edge. // Update the Joystick buttons only upon changes. // falling = high (not pressed - voltage from pullup resistor) // to low (pressed - button connects pin to ground) if (button0.fallingEdge()) { Joystick.button(1, 1); } if (button1.fallingEdge()) { Joystick.button(2, 1); } if (button2.fallingEdge()) { Joystick.button(3, 1); } if (button3.fallingEdge()) { Joystick.button(4, 1); } if (button4.fallingEdge()) { Joystick.button(5, 1); } if (button5.fallingEdge()) { Joystick.button(6, 1); } if (button6.fallingEdge()) { Joystick.button(7, 1); } if (button7.fallingEdge()) { Joystick.button(8, 1); } if (button8.fallingEdge()) { Joystick.button(9, 1); } if (button9.fallingEdge()) { Joystick.button(10, 1); } if (button10.fallingEdge()) { Joystick.button(11, 1); } if (button11.fallingEdge()) { Joystick.button(12, 1); } // Check each button for "rising" edge // Update the Joystick buttons only upon changes. // rising = low (pressed - button connects pin to ground) // to high (not pressed - voltage from pullup resistor) if (button0.risingEdge()) { Joystick.button(1, 0); } if (button1.risingEdge()) { Joystick.button(2, 0); } if (button2.risingEdge()) { Joystick.button(3, 0); } if (button3.risingEdge()) { Joystick.button(4, 0); } if (button4.risingEdge()) { Joystick.button(5, 0); } if (button5.risingEdge()) { Joystick.button(6, 0); } if (button6.risingEdge()) { Joystick.button(7, 0); } if (button7.risingEdge()) { Joystick.button(8, 0); } if (button8.risingEdge()) { Joystick.button(9, 0); } if (button9.risingEdge()) { Joystick.button(10, 0); } if (button10.risingEdge()) { Joystick.button(11, 0); } if (button11.risingEdge()) { Joystick.button(12, 0); } }
-
-
-