✅ Full release
Version: v1.1.0
Latest update: High-score storage
Current features:
- 100 levels
- High-score storage
- Fully playable game loop
- Random sequence generation
- Player input validation
- Progressive difficulty
- Win/Loss sequences
- Unique audio feedback on player input
- Startup melody
- Custom multi level with visible circuit design PCB
- Battery powered usability
This project is a Simon-style memory game built using an Arduino Uno. The player must memorize and repeat an increasingly long sequence of colored LEDs using the corresponding push buttons.
The project focuses on embedded systems programming, finite state machines, input validation, timing control and modular code design. It is being developed incrementally, with each version introducing new gameplay mechanics and hardware features. Development is being tracked using Git for versioning to document project progression.
To make sure this project is accessible to as many people as possible. I have used an visible circuit design without a proper enclosure and rather used the PCB itself as an enclosure to preserve the retro feel of the product and ensure anyone with any kind of components can create and use it. As the a case would require strict measurements and only certain parts to be used. I don't intend to turn this into a consumer grade product, if anyone feels like they would like to please fell free as long as you credit me in the design.
At startup, a random sequence of LEDs is displayed. The player must replicate the sequence using the corresponding colored buttons. Each successful round increases the difficulty by extending the sequence length and increasing the playback speed. If the player enters an incorrect sequence at any point, the game ends and they must restart the game.
| Qty | Component | Value / Part | Description |
|---|---|---|---|
| 1 | Arduino Nano | Arduino Nano v3.x | Main microcontroller |
| 1 | 9 V Battery | — | Power source |
| 1 | Piezo Buzzer | — | Polarized buzzer for audio feedback |
| 1 | Red LED | — | Visual feedback |
| 1 | Green LED | — | Visual feedback |
| 1 | Blue LED | — | Visual feedback |
| 3 | Resistors | 220 Ω | Current-limiting resistors for LEDs |
| 1 | 10 kΩ Potentiometer | B10K | Linear potentiometer |
| 1 | Red Push Button | SW_Push | User input |
| 1 | Green Push Button | SW_Push | User input |
| 1 | Blue Push Button | SW_Push | User input |
| 1 | Power Switch | SPST | Main power switch |
| 1 | 1×8 Pin Header | Male | Board-to-board connector |
| 1 | 1×8 Socket Header | Female | Board-to-board connector |
| 1 | 1×1 Pin Header | Male | Single-pin connector |
| 1 | 1×1 Socket Header | Female | Single-pin connector |
- Define project concept
- Select components
- Create GitHub repository
- Create initial project structure
- Draft wiring schematic
- Connect LEDs and verify operation
- Connect buttons and verify input
- Connect buzzer and verify sound output
- Build and test complete circuit
- Generate random sequences
- Display sequence to player
- Read player input
- Validate player input
- Implement win/lose conditions
- Add score tracking
- Add correct game progression
- Increase sequence length each level
- Add potentiometer to control LED blink speed
- Balance game difficulty
- Add unique tones for each button
- Add correct input feedback
- Add loss melody
- Add startup melody
- Add win melody
- Create initial enclosure concept
- Design button layout
- Design LED placement
- Create custom PCB
- Create enclosure v1
- Refine enclosure based on testing
- Finalize enclosure design
- Test all game functions
- Fix identified bugs
- Improve code organization
- Perform final hardware verification
- Create final schematic
- Add circuit images
- Add project photos
- Document challenges faced
- Document lessons learned
- Complete README
- Designing a reliable input validation system while preventing accidental multiple button presses.
- Debugging state transition issues that caused the game logic to become inconsistent.
- Resolving timing conflicts between LED animations and player input.
- Preventing invalid variable values caused by unintended state changes.
- Structuring the code into reusable functions to improve maintainability.
- Finding accurate part footprints.
- Aligning parts to create multi level PCB
- Making sure High-score was only set to 0 on first boot.
Additional challenges will be documented as development continues.
- Finite State Machine (FSM) design
- Edge detection for button input
- Software debouncing techniques
- Modular programming using custom functions
- Enum-based state management
- Switch-case driven program flow
- Random sequence generation
- Timing management using millis()
- Debugging embedded software
- Hardware/software integration
- Multi level PCB design
- Using EEPROM for storage of important variables.
Additional skills will be documented as development continues.
- Add EEPROM to save important user data such as high scores
- Add LCD for live feedback
- Create custom win/loss screens for the LCD
- Add an LED matrix to increase difficulty as sequences can come from a bigger space and in a harder to remember pattern
- Add a charging feature to improve portability
- Multiple gameplay modes
- Use ESP32 instead of Arduino to link the game to an online leaderboard
- Maximum 100 levels
- High-score storage
- Multi level PCB
- Visible circuit design
- Custom PCB
- Battery power
- Added unique audio feedback for each button
- Added startup melody
- Added win melody
- Added loss melody
- Integrated audio feedback into gameplay
- Playable beta release
- Added input validation
- Added win/lose sequences
- Improved game progression
- Added score tracking
- Added progressive difficulty using random sequences that increase in length after each successful round
- Added a potentiometer to control LED speed
- Initial hardware prototype and schematic
- Initial planning

