This project uses a standard school locker with two 8*8 holes grids. 5 mm LEDs fits beautifully in those holes, small tactile switches too, a LCD display can be added in the name's tag space, thus a boring locker can be easily transformed into a multi-game arcade cabinet. Enjoy!
Presentation video in french, shows the running prototype.
This project is licensed under the terms of the MIT license. Check LICENSE.txt
for more informations.
- Main menu (LCD + Matrix):
- 1 player games:
- Snake
- Flappy Bird
- Breakout (not currently implemented)
- Race (not currently implemented)
- 2 player games:
- Pong
- Snake
- About screen with hidden option menu & student's schedule display
- 1 player games:
- Event-driven software
- Multi-languages interface, easily localizable
- Screensaver with delay depending on context
- High-scores logging (not currently implemented)
- Sounds (not currently implemented)
- Alarm when opening locker without pressing a predefined sequence of buttons
- Automatic standby based on time (not currently implemented)
- Arduino (I use a Nano with an ATmega328)
- MAX7219/MAX7221 with 8*8 LED matrix
- I2C 16*8 LCD display
- 5 momentary pushbuttons
- DS3231 I2C RTC (optional) (not currently implemented)
- Piezoelectric buzzer (optional) (not currently implemented)
- Photocell (LDR) (optional) (not currently implemented)
Please look at config.h
to configure the system and pins.
I currently use Arturo to compile the sketch. If you want to use the Arduino IDE, you must:
- Copy all libraries in
lib
in Arduino'slibraries
folder or use the Library Manager to install them (Arduino IDE >= 1.6.2)) - Add
#include <LedControl.h>
,#include <LiquidCrystal_I2C.h>
and#include <Sodaq_3231>
at the top ofsrc/ArcadeLocker.ino
- Rename the
src
directory toArcadeLocker
- Sounds!!
- Better localization system (kind of ugly right now, I guess?)
- Events handling optimization (loops)
- Enhance
newLcdScroll()
(start position, spaces before looping) - Settings storage in EEPROM
- High scores with the ability to enter a name or initials
- Maybe add a custom
malloc()
to dynamically allocate app's variable memory and not having all those global variables taking place in memory (or just usemalloc()
?) - Put animations instead of scrolling text on matrix and maybe remove all that code to scroll text on the matrix now that there is an LCD display
- Remove unnecessary timer events when first launching them in games (just call the callback function, no need to wait on start)
- Reorganize functions order in apps' code to stay consistent between them
- Enhance
printLcd()
to center text automatically? (would consume cycles usingstrlen()
) - Put strings buffers in an array?
- Add animations to screensaver