GamePad-Retro
When I was a kid video-games were simple and days spent playing with my Nokia 3310 in snake trying to beat my own record are countless. So my idea is to pay homage to some of my favorite retro games by creating a tiny retro console.
In particular for this project the following games are available:
- Snake
- Pong (with its infamous artificial intelligence)
Github repository (for additional files and code)
How it is done
Arduino components:
- Arduino board (Arduino UNO is fine)
- Prototyping board
- OLED Display 0.96" (SSD1306)
- Passive buzzer
- IR Transmitter and receiver

External libraries
- ListLib: simple implementation of lists for Arduino GitHub source (*)
- ezBuzzer: non-blocking library for passive buzzer GitHub source (**)
- IRemote: library for decoding IR signals GitHub source
- u8g2: graphics library for drawing on an SSD1306 OLED display GitHub source; it provides some drawing primitives like:
drawCircle(…),drawBox(…), ...
(*) Arduino does not come with the STL (Standard Library), so we don’t have lists, queue or other data structure
(**) Arduino is a one core board and it does not support multithreading, so using the Tone(…) and NoTone(…) functions in combinations with delay(…), means that we cannot “beep” and in the meanwhile do other stuff in code. This library provides an “escamotage” for achieving this particular result
More details on how to import the code and the libraries in GamePad.pdf
EXPANDED TECHNICAL DETAILS
Micro-Handheld Gaming Engineering
"GamePad" is a miniaturized, portable gaming system built on the Arduino Nano or Pro Micro.
- Display Interface: Uses a high-contrast 0.96" OLED (SSD1306). The graphics are rendered using the
Adafruit_GFXlibrary, optimized for fast sprite animation and font rendering at 128x64 resolution. - Tactile Inputs: Features a 4-way D-pad (buttons) and two "Action" buttons with internal pull-up resistors for responsive gameplay without input-lag.
Software Architecture
- Game Engine: Includes a simple frame-buffer logic. Games like Tetris, Pong, or Snake are coded into the Arduino, demonstrating efficient memory management on a device with limited SRAM.