I have fond memories of handheld LED electronic games from the late '70s and early '80s. Machines like Armor Battle, Auto Racer, and Missile Attack from Mattel Electronics managed to keep us entertained and hooked using just a few red LEDs, some buttons, and a tiny speaker that made beeps and buzzes as sound effects.
These games were super simple, but they really tested your reflexes as the difficulty ramped up. They'd pull you into this sort of trance, where you were completely focused. You became one with the machine. Your only mission? Get the highest score, flip the scoreboard, and beat your rivals.
Out of all those games, one in particular caught my attention: Mattel's Gravity. It’s a very straightforward game—just three buttons, three arrays of 9 red LEDs, and three game modes: Juggling, Coin Drop, and Docking.
The Juggling mode is seriously addictive. You have to keep three balls in constant motion, making sure none of them crosses the hit line. Coin Drop tests your reflexes. It simulates coins falling, and you have to press the button just as they pass the hit line. Docking mode? Meh, nothing to write home about—it doesn’t really grab you or offer much fun.
Unfortunately, Gravity didn’t catch on much, so not many units were sold. It’s really hard to find, and ones in good condition rarely go for less than €200.
Trying to create my own version of Gravity is what led me to build this little portable LED machine. But I didn’t want to limit the hardware to just one type of game, so I decided to use an 8x8 LED array (neopixels, of course). Three buttons seemed like more than enough for input. But instead of just regular buttons, I went for retro-lit mechanical switches (also with neopixels) and hot-swap mounting.
I also added a potentiometer as an input device, both for volume and brightness control, and as an analog control for games (Arkanoid, anyone?).
For sound effects, I went with a hybrid solution: one output channel from the microcontroller to generate multi-tone beeps and buzzes, keeping the classic vibe alive. And a mini MP3 player with a micro SD card, controlled by serial, to handle all kinds of sounds without overloading the CPU or adding unnecessary complexity to the code.
To run all this, I opted for a Raspberry Pi Pico. It’s super affordable, powerful, and versatile. Plus, you can program it in C, Micropython, and CircuitPython.