All projects
01 / hardware & play

One-Button
Arcade

A little arcade built around a very simple question: how much can you do with one button?

ESP32-S3 / Arduino / OLED
The idea

How much can one
button do?

I built an arcade around a simple constraint: every interaction has to work through one button. Four quick presses start a ten-second speed round; a longer hold opens the leaderboard.

The same switch handles play and initials entry. An OLED shows the current presses per second, five saved high scores, and a lifetime press counter. Scores and the counter survive power loss.

A custom 3D-printed enclosure brings the display, switch, microcontroller, and wiring together. The build gave me practice with embedded code, debouncing, persistent storage, and fitting electronics into a physical case.

View the GitHub repository

A closer look

Interactive 3D
Placeholder / cube

Loading 3D preview…

Drag to rotate. Scroll or pinch to zoom. Arrow keys also rotate.

A cube for now. The arcade's model will live here as the project takes shape.

Hardware list

Parts & connections

All currently documented parts are listed here. The exact switch model, cable lengths, fasteners, and power setup still need a final build inventory.

One-Button Arcade components and remaining build details
PartQuantityRole & build notes
Adafruit QT Py ESP32-S31Microcontroller running the Arduino sketch. The documented board selection is the No PSRAM version.
128 × 64 SSD1306 I²C OLED1Game display. The documented Adafruit display uses address 0x3D; diagnostics also check 0x3C.
Normally-open mechanical switch1Input between A0 and GND. The internal pull-up is enabled; no external pull-up resistor is required. Exact switch model is not recorded.
Display connectionNot recordedSTEMMA QT / Qwiic cable, or four direct wires: 3V, GND, SDA1 (GPIO 41), and SCL1 (GPIO 40). The README documents both options; the installed cable is not specified.
Button wiring2 connectionsConnects the switch to A0 and ground. Wire gauge, length, and connector type are not recorded.
Custom 3D-printed enclosure1 enclosureHouses the display, switch, board, and wiring. Printed-piece count, material, and mounting hardware are not recorded.
Power & programming connectionNot recordedThe setup guide uses the board’s USB port for uploads. The final power supply and cable specifications are not documented.
Wiring & setup on GitHub

Development log

Build notes & updates

Code updates and notes from the build. Dated entries link to the corresponding GitHub history.

Making display failures visible

Updated OLED initialization to use the QT connector’s I²C pins and added startup messages for bus status, display detection, and restored counter data. A recurring serial heartbeat helps confirm the sketch is running when the screen is blank.

View the diagnostics update

A complete game through one input

Added the lifetime counter, timed speed round, five saved high scores, and three-letter initials entry. Press timing separates normal counting, starting a round, and browsing the leaderboard; debouncing keeps switch chatter from becoming extra presses.

View the initial game code

Bringing the hardware together

Designed and 3D-printed a case around the display, mechanical switch, QT Py, and wiring, then tested the assembled device. Build photos and enclosure files have not been added to this page yet.

Read the current build documentation