main
Heißer-Draht-Spiel – Arduino UNO R3
PlatformIO-Projekt zur Auswertung eines "Heißer Draht"-Spiels mit 32x8-LED-Matrix (MAX7219, 4 Module).
Verdrahtung
| Funktion | Arduino-Pin | Hinweis |
|---|---|---|
| MAX7219 DIN | D11 (MOSI) | Hardware-SPI |
| MAX7219 CLK | D13 (SCK) | Hardware-SPI |
| MAX7219 CS/LOAD | D10 | |
| MAX7219 VCC/GND | 5V / GND | bei 8 Modulen ausreichend dimensionierte 5V-Versorgung vorsehen |
| Heißer-Draht-Kontakt | D2 | gegen GND, INPUT_PULLUP |
| Buzzer (passiv) | D3 | anderes Bein an GND |
| Reset-Button | D4 | gegen GND, INPUT_PULLUP |
| Startkontakt | D5 | gegen GND, INPUT_PULLUP |
| Endkontakt | D6 | gegen GND, INPUT_PULLUP |
Der heiße Draht wird per Software entprellt: Nach einem gezählten Fehler muss der Kontakt mindestens WIRE_RELEASE_MILLISECONDS Sekunden durchgehend frei sein, bevor eine neue Berührung gezählt wird. Der Wert ist in include/Config.h konfigurierbar und steht standardmäßig auf 300 Millisekunden.
Build & Upload (PlatformIO)
pio run
pio run -t upload
Spielablauf
- Reset-Button drücken und loslassen → Spiel ist "scharf" (Timer=0, Fehler=0).
- Wer zuerst berührt wird – Start- oder Endkontakt – bestimmt automatisch die Laufrichtung; die Gegenseite wird zum Ziel. Der Timer startet.
- Berührt der Spieler den Draht, zählt das einen Fehler (auch bei Dauerkontakt nur 1x). Eine neue Berührung wird erst gezählt, wenn der Draht mindestens
WIRE_RELEASE_SECONDSSekunden durchgehend frei war. Es ertönt ein kurzer Piepton (150 ms) und eine konfigurierbare Strafzeit (PENALTY_SECONDS_PER_ERRORininclude/Config.h, Standard 5s) wird zur Anzeige addiert. - Erreichen des Zielkontakts stoppt den Timer, Endzeit und Fehleranzahl bleiben stehen.
- Reset drücken und loslassen setzt das Spiel zurück auf Schritt 1.
Anzeige
- Spalten 0-7: eine LED je Fehler, von oben nach unten, danach beginnt eine neue Spalte.
- Spalten 8-11: leer.
- Spalten 12-28: Spielzeit im Format
MM:SS. - Spalte 29: leer.
- Spalten 30-31: Heartbeat oben; blinkende Anzeige für ein aktives Spiel unten.
Testcheckliste
- Reset loslassen → Anzeige zeigt
00:00, keine Fehler-LEDs - Start- oder Endkontakt zuerst berühren → Timer läuft, Richtung korrekt erkannt (jeweils andere Seite beendet das Spiel)
- Draht kurz berühren → genau 1 Fehler-LED an, 1 Piepton, Zeit springt um Strafsekunde(n)
- Draht dauerhaft halten → weiterhin nur 1 Fehler, kein Dauerton
- Draht kurz loslassen und vor Ablauf von 1 Sekunde erneut berühren → weiterhin nur 1 Fehler
- Draht mindestens 1 Sekunde loslassen und erneut berühren → zweiter Fehler wird gezählt
- Zielkontakt berühren → Timer stoppt, Endstand bleibt stehen
- Reset drücken und loslassen → alles zurückgesetzt
- Seriellen Monitor mit
9600Baud öffnen → Reset, Start, Fehler und Zielkontakt erscheinen als Statusereignisse inklusive Fehlercounter
Bekannte Anpassungspunkte
MATRIX_HARDWARE_TYPEininclude/Config.h: je nach MAX7219-Modulcharge kann die Anzeige gedreht/gespiegelt sein – dannFC16_HW/GENERIC_HW/PAROLA_HWdurchprobieren.- Buzzer wird als passiv angenommen (
tone()). Bei einem aktiven Buzzer müsste die Ansteuerung inmain.cppdurch ein einfachesdigitalWritemit eigenem Timing ersetzt werden.
Languages
C++
100%