This is an old revision of the document!
Retro Games Console
Autor: Basarâm Ștefan
Grupa: 333CD
Introduction
What?
This project consists of a game console featuring popular retro games such as Snake, Pong and Asteroids. It uses as control inputs a button and a joystick, with an ultra-wide display composed of 2 LED 8×8 matrices and a buzzer for audio feedback.
Why?
The purpose of this device is to facilitate a unique gaming experience in a portable package which aims to capture the golden period of arcade games from the 1980s. This console offers a unique handling to players today who are used to playing games on their phones and desktops/laptops.
How come?
My inspiration comes mainly from my existing passion for graphic and game design. Having limited resources, I decided examples from the first generation of video games are the most suited.
For whom?
The biggest audience for this device are the teens who have an affinity for old-school video games who would thoroughly enjoy a similar gaming experience to the one provided by arcade cabinets, all available in a neat and portable package similar to actual game consoles on the market.
Description
Powering ON
The analog joystick is used to move the characters and the dedicated module button is used for firing or adjusting the game difficulty.
If a player wishes to skip a game, they can do so by pressing twice on the button integrated in the analog joystick in quick succesion.
Game loop
Every frame, the game updates its game state, reads user input and draws the result to the main display formed of two 8×8 LED matrices.
If the game detects an entity collision or a decision is being prompted, the buzzer will be triggered to provide an auditory feedback.
Lives system
For each of the three games the player has 3 lives. These are represented by the 3 color LEDs arranged in an LED array which are colored red, yellow and green from left to right.
When a player loses a life, the rightmost LED flashes and turns off. The current game subsequently restarts, or resumes. When a player consumes all lives they will enter into a gameover.
The red and green LEDs flash for a moment, followed by one of them being active at a time signifying the player's choice to either retry the current game, represented by the red LED, and moving to the next game represented by the green LED.
Hardware Design
Components
-
Module Button - The reason I bought a button with dedicated pins, instead of using one ready-to-go on a breadboard, is precisely because I did not want to use it directly on a breadboard.
Analog Joystick - With limited controls, a joystick offers a lot of options for movement, along with a normal button in a single package
Two 8x8 LED Matrices - The main display of the console. Unlike a typical LED matrix, these display modules have a microcontroller which control the LEDs via just 5 input pins, which not only simplifies the circuitry massively, they also allow to be used independently of a breadboard. They also have 5 output pins which mirror the input ones which allow daisy-chaining displays by assigning every display an address. I decided against using these however in order to favor a smaller console.
Three LEDs of colors red, yellow and green (
part of kit) - Secondary display. Shows extra info about the current game state.
-
Passive Buzzer - Every respectable console with a small budget should sport an annoying buzzer such as this.
9V Battery +
Adapter - Allows the console to be used without being tethered to a computer.
-
Breadboard - Used for wiring together the display and player inputs, as well as powering the passive buzzer.
Pin configuration
For all devices, the VCC pins are connected to 5V and GND to a GND pin on the host (Arduino).
The Host ↔ Device column presents which pins are used, as well as the direction that information flows in.
Name | Type | Host ↔ Device | Reason |
Module button | Digital | D2 ← out | Binary press state of button is read via INT0 interruption |
LED Matrix (A) | D8 → DIN | Data input, sets the state of any LEDs on the matrix |
D9 → CS | Chip select |
D10 → CLK | Clock signal |
LED Matrix (B) | D5 → DIN | Data input, sets the state of any LEDs on the matrix |
D6 → CS | Chip select |
D7 → CLK | Clock signal |
Red LED | D13 → LED | Pins power the LED ON/OFF |
Yellow LED | D12 → LED |
Green LED | D11 → LED |
Joystick | Analog | A0 ← VRx | Continous input from a potentiometer, representing 2D movement |
A1 ← VRy |
Digital | D4 ← SW | Button press state can be read digitally |
Passive buzzer | Digital (PWM) | D3 → Buzzer | The use of PWM enables adjusting the volume of the buzzer, along with its tone |
Software Design