Simon Says
In this project, I melded my passion for programming with my love for gaming and design. Drawing inspiration from the Simon Says game, I set out to create an electronic version that utilized arcade buttons and vibrant LEDs. The objective was simple: memorize and repeat a sequence of button presses as it progressively grew in complexity. But behind this seemingly straightforward concept lay a journey of circuitry, code, and careful design considerations.
Introduction
Learning
Development Plan
The project timeline was tight, with only one week allocated for concept, design, implementation, and presentation. To ensure the smooth execution of my vision, I laid out a timeline that allowed me to conquer challenges, iterate on ideas, and deliver a polished end product that would captivate my audience.
-
Code (3/4)
-
Need to randomly generate and track button press order
-
-
Circuit (3/6)
-
Start button (required)
-
Arcade buttons (required)
-
Alternative: buttons with separate LED
-
-
Prototype Version (3/7)
-
Active buzzer (optional)
-
Screen to track score (optional)
-
-
Final Presentation and Documentation (3/9)
Rewiring Arcade Buttons
To create the game, I needed to rewire the arcade buttons I sourced from Amazon. This aspect of the project required me to quickly learn about the components, their pin configurations, and how to integrate them with the Arduino. As I delved into resources and documentation, I gained an understanding of how to establish connections between the buttons, LEDs, and the Arduino board. This hands-on experience allowed me to translate theoretical knowledge into practical skills and marked the beginning of the design phase.
Design
Designing the Circuit and User Interface
My first challenge was to design a circuit that incorporated arcade buttons and LEDs. This phase demanded meticulous diagramming to ensure that the circuit layout was not only functional but also visually intuitive.
I meticulously sketched out the connections, thoughtfully selecting the placement of each button and its corresponding LED. This process required a delicate balance between aesthetics and functionality, guaranteeing that the visual cues provided by the LED lights aligned with the gameplay.
Circuit diagram
The raw physical circuit and arcade buttons attached
But the challenge didn't stop at circuitry alone. To house the setup, I found a suitable cardboard box and cut precise holes in the cardboard to hold the arcade buttons.
Furthermore, I placed the Arduino board and breadboard within the box's confines. This thoughtful arrangement wasn't just about aesthetics – it was about creating an unobtrusive setup that allowed players to engage with the game without the distractions of the circuit, a physical abstraction.
The box used for a cleaner interface
Development
Enhancing the User Experience
The heart of the game lay in the code that would control the sequence, monitor user input, and provide feedback. My approach broke down the functionality into manageable sections, each responsible for a specific aspect of the game. By structuring the code into distinct functions, I could tackle tasks such as generating random sequences, flashing the LED pattern, playing sounds, checking user input, and managing game progression.
Furthermore, I considered factors like button colors and audio feedback to create an engaging and inclusive user experience. For example, colored buttons would allow users to better remember the order of what they needed to press, and unique buzzing sounds for each button would allow those who are visually impaired to play.
Evaluation
Issue Deep-Dive
Throughout the project, I encountered an array of challenges that ultimately served as stepping stones in my growth as a developer. These hurdles, while demanding at times, provided invaluable insights and honed my ability to adapt.
The most immediate challenge I faced was the timeframe for completing the project within a week. This constraint urged me to strike a delicate balance between progress and delivering a refined end product. The pressure of time taught me how to streamline my workflow, allocate tasks strategically, and maintain focus on the project's core objectives without compromising quality.
As I delved into coding, I grappled with conceptualizing and implementing a sequence generation and tracking mechanism. The intricate interplay of button presses, LED feedback, and the gameplay logic posed a puzzle that required patience to solve. This challenge tested my problem-solving skills, pushing me to synthesize a coding structure that executed flawlessly.
Demo Video
In addition to turning in the code for my final, I produced and filmed a demo video for the game. The video serves as a communication tool when presenting the project and to test the user experience.
A video I produced showcasing the game
What I Learned
The inspiration behind this project stemmed from my interest in programming and games. Arduino, a widely-used microcontroller for learning about hardware, provided the perfect opportunity to integrate my coding abilities into a functional application.
-
Arduino Mastery and Hardware Integration: This project introduced me to the world of Arduino and physical computing. Learning how to connect and manipulate various components, including arcade buttons and LEDs, marked a pivotal point in my skill development. Understanding pin configurations, wiring methods, and component interaction provided me with a solid foundation in hardware integration that I can carry forward into future projects.
-
Circuit Design and Layout: Navigating the nuances of designing an efficient and organized circuit was a skill that I quickly recognized as crucial. I grasped the significance of well-planned circuitry, ensuring not only seamless functionality but also a visually appealing setup.
-
Software-Hardware Synergy: Creating an arcade-style game underscored the symbiotic relationship between software and hardware. The interplay between coding logic and physical button responses provided insights into the intricacies of translating digital commands into tangible actions.
-
Resourcefulness and Adaptability: The project's constraints encouraged resourcefulness and adaptability. The choice of a cardboard box for housing the setup highlighted my ability to make the most of available resources.
-
Project Management and Time Allocation: Mapping out a comprehensive timeline to complete the project within a week instilled effective project management skills through balancing feature implementation, learning new concepts, and ensuring a polished outcome.