Simon Game
This preset configures a Simon-style memory game using four player buttons, a pixel strip for visual cues, and a relay output for the win condition. It is intended as a drop-in baseline for sequence-repeat gameplay where players watch a pattern, repeat it correctly, and trigger a physical unlock or effect when the puzzle is solved.
This guide explains the built-in setup preset and the behavior pieces that make it work. The walkthrough video for the three advanced button presets is Advanced Button Games on YouTube.
Where to start
- Open the Prop Wizard or setup preset flow.
- Choose Simon Game from the available presets.
- Apply the preset.
- After the controller saves and reloads, inspect the generated sections listed below.
- Adjust pins and physical wiring in Configuration > Connections > Inputs, Outputs, and Modules before final testing.
Generated hardware
| Input | Type | Pin | Polarity | Pull-up |
|---|---|---|---|---|
| button1 | button | 42 | Active low | Pull-up on |
| button2 | button | 41 | Active low | Pull-up on |
| button3 | button | 40 | Active low | Pull-up on |
| button4 | button | 39 | Active low | Pull-up on |
| Output | Type | Pin | Polarity | Behavior |
|---|---|---|---|---|
| relay | relay | 1 | Active high | Steady |
| Pixel strip | Pin | Pixels |
|---|---|---|
| pixels | 2 | 20 |
Game flow
- The first button press starts the staged Simon flow from
Armed. - Each stage displays a longer color order on the pixel strip.
- Each input sequence must be completed in the matching stage before advancing.
- A sequence fail returns the game to
Armed; completing the final stage entersSolvedand turns on the relay.
States and timers
The preset starts in Armed.
| State |
|---|
| Armed |
| Stage 1 |
| Stage 2 |
| Stage 3 |
| Stage 4 |
| Solved |
| State | Returns to | Delay | Timer id |
|---|---|---|---|
| Solved | Armed | 3000 ms | auto_Solved |
Variables
This preset does not rely on variables.
Input sequences
| Sequence | Runs while | Expected code | Timeout | Mismatch mode |
|---|---|---|---|---|
| sequence_1 | Stage 1 | red | 30000 ms | instant_fail |
| sequence_2 | Stage 2 | red, green | 30000 ms | instant_fail |
| sequence_3 | Stage 3 | red, green, blue | 30000 ms | instant_fail |
| sequence_4 | Stage 4 | red, green, blue, white | 30000 ms | instant_fail |
Logic rules
Logic Rules are the condition checks. They decide when a named event is true, but they do not directly move relays or pixels until an Action Trigger uses them.
| Rule | Match mode | Conditions |
|---|---|---|
| anyPressed | any | input button1 = true input button2 = true input button3 = true input button4 = true |
| anyFailed | any | sequence sequence_1 = fail sequence sequence_2 = fail sequence sequence_3 = fail sequence sequence_4 = fail |
| anySuccess | any | sequence sequence_1 = success sequence sequence_2 = success sequence sequence_3 = success sequence sequence_4 = success |
Action triggers
Action Triggers are the work steps. They listen to inputs, logic rules, states, or sequences and then set states, variables, relays, and pixel effects.
| Action trigger | Source | Runs while | Steps |
|---|---|---|---|
| solved | state:Solved (enter) | * | 0 ms: relay -> relay = on 0 ms: light_effect -> pixels = start, wave, color #37ff00 |
| reset | state:Solved (exit) | * | 0 ms: relay -> relay = off 0 ms: light_effect -> pixels = stop |
| start | logic:anyPressed | Armed | 0 ms: set_state -> Stage 1 |
| fail | logic:anyFailed | * | 800 ms: light_effect -> pixels = start, scanner, color #ffdd00, auto release 1200 ms 3200 ms: set_state -> Armed 3350 ms: set_state -> Stage 1 |
| stageComplete | logic:anySuccess | * | 1000 ms: set_state_next -> Stage 2 = {“steps”:1,“wrap”:true} |
| stage1lights | state:Stage 1 (enter) | * | 0 ms: output_sequence -> redLight = start |
| stage2lights | state:Stage 2 (enter) | * | 0 ms: output_sequence -> redLight = start 250 ms: output_sequence -> greenLight = start |
| stage3lights | state:Stage 3 (enter) | * | 0 ms: output_sequence -> redLight = start 250 ms: output_sequence -> greenLight = start 500 ms: output_sequence -> blueLight = start |
| stage4lights | state:Stage 4 (enter) | * | 0 ms: output_sequence -> redLight = start 250 ms: output_sequence -> greenLight = start 500 ms: output_sequence -> blueLight = start 750 ms: output_sequence -> whiteLight = start |
| redPress | input:button1 (true) | Stage 1 | 0 ms: output_sequence -> redLight = start |
| greenPress | input:button2 (true) | Stage 1 | 0 ms: output_sequence -> greenLight = start |
| bluePress | input:button3 (true) | Stage 1 | 0 ms: output_sequence -> blueLight = start |
| whitePress | input:button4 (true) | Stage 1 | 0 ms: output_sequence -> whiteLight = start |
What to customize first
- Rename inputs and outputs to match the physical labels on your prop.
- Confirm every generated pin matches the wiring shown on the board pinout.
- Adjust pixel strip count under Configuration > Lighting > Addressable Pixels if your strip is not 20 pixels.
- Change the reset timer or reset action if you do not want the game to automatically re-arm.
- Keep the generated Logic Rule names until the game is tested; the Action Triggers reference those names.