Skip to content

Commit 0e4eb01

Browse files
Project/adelina.cucerave (#1370)
* Create index.md template * da da * m * m * final? sper * svg nu apare? * . * hardwareee * Update website/versioned_docs/version-fils_en/project/2026/adelina.cucerave/index.md Co-authored-by: Omer Genan <81963672+genan2003@users.noreply.github.com> * kicad schematic too big * updated log * Update software Changed KiCad schematic a bit + added some more info about software * added video proof --------- Co-authored-by: Omer Genan <81963672+genan2003@users.noreply.github.com>
1 parent b410ade commit 0e4eb01

2 files changed

Lines changed: 18 additions & 1 deletion

File tree

website/versioned_docs/version-fils_en/project/2026/adelina.cucerave/index.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,15 @@ By building a system that gives instant feedback through lights and sounds, user
8888

8989
### Week 12:
9090
- Will start doing testing of hardware
91+
- Started thinking about software structure
92+
93+
### Week 13:
94+
- Started writing the skeleton of the code, haven't yet figured how to upload it to the private github page
95+
- Realised one piezo might be broken, no time to replace it
96+
- Rest of the pieces I needed arrived
97+
98+
### Week 14:
99+
- Piezo sensors and LED rings work (sort of), there is still a lot of optimization to be done
91100

92101
## Hardware
93102

@@ -161,6 +170,14 @@ The format is
161170
| [panic-probe](https://github.com/knurling-rs/probe-run) | Panic handler | Error debugging. |
162171
**TBC
163172

173+
## Software Description
174+
175+
For the software architecture, I chose to implement an event-driven system using the embassy-rs asynchronous framework. This allows the STM32 microcontroller to handle multiple tasks concurrently without blocking. Rather than relying on shared global variables (can lead to memory safety issues and tight coupling) the system uses "message passing". Independent tasks communicate exclusively by sending data through strictly typed asynchronous channels. Because of this, for ex if the TFT display takes a few milliseconds to draw a frame, it never blocks the sensing tasks from instantly registering a new physical hit.
176+
177+
The system is strictly divided into three modular layers: Input, Logic, and Output. The Input layer acts as the sensory node; dedicated tasks continuously sample raw ADC values from the piezoelectric sensors, filter out electrical noise, and fire clean "HitEvents" into the system's channels. The Logic layer serves as the central brain, where the main game task listens for these events, evaluates them against the timing and scoring rules, and dispatches commands. Finally, the Output layer acts as the hardware translator. Dedicated peripheral tasks sit idle until commanded, utilizing Direct Memory Access (DMA) and SPI to blast complex visual data to the WS2812 LED rings and the ST7735 screen without taxing the main processor. This approach ensures that the hardware remains completely independent from the core game logic.
178+
179+
[Device demonstration](https://youtube.com/shorts/BV66PGiUwCo)
180+
164181
## Links
165182

166183
<!-- Add a few links that inspired you and that you think you will use for your project -->

website/versioned_docs/version-fils_en/project/2026/adelina.cucerave/kicadschematic.svg

Lines changed: 1 addition & 1 deletion
Loading

0 commit comments

Comments
 (0)