The code for your Simon game will be submitted via canvas. Please include only code files and a “README.txt” that describes (a) briefly your code architecture and approach, (b) the score that you think you should get based on the rubric below, and (c) how to access or run any special features. You may include two different “main.c” files if desired, but the default functionality should be Simon.
Prof. Kemere or the lab assistants will be running your code on their boards for evaluation. Your score for the final project will be based on the rubric below.
Students from the class will be given the chance to evaluate based on a simpler rubric. These scores will not be used for grading, but course bonus will be assigned based on the final ranking of Simon programs. Additionally, a small bonus will be given for each of your peer’s Simon games you evaluate.
To facilitate peer grading, the code will be due March 27, 2023.
Rubric: (10 pts each (mvp is 30 pts, code is 20 pts), 130 total)
The game “Simon” is a classic toy which tests the working memory of the player. For the final project, you will create a small, coin cell-operated Simon game. This will involve PCB design and fairly involved firmware to achieve an enjoyable user experience. In addition, you will be invited to add some sort of interesting feature beyond the Simon game. In the past, this has ranged from simple animations to a mode in which the device becomes a music sequencer.
Here’s a video from Tiger Yang (Spring 2019), showing a Simon board in action along with a number of bonuses.
In our variant of Simon, the point of the game is to learn a sequence of M button presses. Each button corresponds to one of the LEDs and to one frequency of PWM tone. On the nth turn, the device plays the first n elements of the sequence. So one tone/LED on turn one, two on turn two, etc. The pattern of the n-1 elements of the sequence are the same as the previous turn. Each turn, after the sequence is played, the player must push the appropriate buttons to recreate the sequence. If they do it correctly, the game proceeds to the n+1th turn. If they make an error or wait too long (measured by the time since the last button press), they lose. Winning corresponds to playing the full M-element sequence. If the player loses, the device should play a “Game Over - Lost” animation that continues until it is reset. Similarly, if the player wins, the device should play a “Game Over - Won” animation until it is reset (e.g., by power cycling or pressing a button).
Details:
Here’s a nice video from Joshua Harper (Spring 2022) showing a Simon board in action.
Much of Simon can be pieced together by using code developed from previous labs. To help you,
Physical information is given in the ELEC327 Simon repository Eagle CAD schematic in the ELEC327 git repository.