⭐⭐ Fortgeschrittener Anfänger
⏱️ 25 Minuten
Reaktionsspiel
Wie schnell bist du? Warte, bis die LED angeht. Drücke dann so schnell wie möglich auf den Knopf. Das Display zeigt deine Zeit in Millisekunden. Fordere deine Freunde heraus!
🧰 Was brauchst du?
💡
1× LED (Lämpchen)
🔌
USB-Kabel + Jumperkabel🗺️ Schaltplan
Folge den Drähten vom Arduino zu jedem Teil. Die Farben der Drähte darfst du selbst wählen.
| Von | Nach |
|---|---|
Arduino UNO · D2 |
Druckknopf · 1 |
Druckknopf · 2 |
Arduino UNO · GND |
Arduino UNO · D13 |
Widerstand 220 Ω · 1 |
Widerstand 220 Ω · 2 |
LED (Lämpchen) · ANODE |
LED (Lämpchen) · CATHODE |
Arduino UNO · GND |
Arduino UNO · A4 |
OLED-Display 0,91" · SDA |
Arduino UNO · A5 |
OLED-Display 0,91" · SCL |
Arduino UNO · 5V |
OLED-Display 0,91" · VCC |
Arduino UNO · GND |
OLED-Display 0,91" · GND |
🛠️ So baust du es
- Setze den Druckknopf über die Lücke des Breadboards: ein Beinchen zu Pin 2, ein Beinchen auf der anderen Seite zu GND.
- Setze die LED mit einem Widerstand von 220 Ω an Pin 13, das kurze Beinchen zu GND.
- Schließe das OLED-Display an: SDA zu A4, SCL zu A5, VCC zu 5V und GND zu GND.
💻 Der Code
// Reaktionsspiel
// Warte, bis die LED angeht, und druecke dann so schnell wie moeglich auf den Taster.
// Das Display zeigt, wie schnell du warst!
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
const int TASTER_PIN = 2; // Drucktaster an Pin 2 (andere Seite nach GND)
const int LED_PIN = 13; // LED an Pin 13 (ueber den Widerstand)
Adafruit_SSD1306 anzeige(128, 32, &Wire, -1); // OLED: SDA = A4, SCL = A5
unsigned long besteZeit = 0; // Deine schnellste Zeit bis jetzt
// Zeigt einen Text gross auf dem Display
void zeige(const __FlashStringHelper* oben, unsigned long zahl) {
anzeige.clearDisplay();
anzeige.setTextSize(1);
anzeige.setCursor(0, 0);
anzeige.print(oben);
if (zahl > 0) {
anzeige.setTextSize(2);
anzeige.setCursor(0, 14);
anzeige.print(zahl);
anzeige.print(F(" ms"));
}
anzeige.display();
}
void setup() {
pinMode(TASTER_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
randomSeed(analogRead(A0)); // Sorgt fuer echt zufaellige Wartezeiten
anzeige.begin(SSD1306_SWITCHCAPVCC, 0x3C);
anzeige.setTextColor(SSD1306_WHITE);
}
void loop() {
zeige(F("Taste druecken..."), 0);
while (digitalRead(TASTER_PIN) == HIGH); // Warten, bis du den Taster drueckst
while (digitalRead(TASTER_PIN) == LOW); // ...und wieder loslaesst
zeige(F("Bereit? LED!"), 0);
delay(random(2000, 5000)); // Eine geheime Wartezeit zwischen 2 und 5 Sekunden
if (digitalRead(TASTER_PIN) == LOW) { // Zu frueh gedrueckt? Schummler!
zeige(F("Zu frueh! Nochmal."), 0);
delay(2000);
return;
}
digitalWrite(LED_PIN, HIGH); // JETZT!
unsigned long start = millis();
while (digitalRead(TASTER_PIN) == HIGH); // Warten auf deinen Druck
unsigned long zeit = millis() - start;
digitalWrite(LED_PIN, LOW);
if (besteZeit == 0 || zeit < besteZeit) {
besteZeit = zeit;
zeige(F("NEUER REKORD!"), zeit);
} else {
zeige(F("Zeit:"), zeit);
}
delay(3000);
}
🧠 Was macht der Code?
- Nach einem Druck auf den Knopf warten wir eine geheime Zeit zwischen 2 und 5 Sekunden (
random()). - Dann geht die LED an und wir starten eine Stoppuhr mit
millis(). - Wenn du drückst, rechnen wir aus, wie viele Millisekunden es gedauert hat. Deine beste Zeit merken wir uns.
🎯 Probier mal …
- Mach daraus ein Spiel für zwei Spieler, jeder mit einem eigenen Knopf
- Lass einen Summer piepen, wenn es einen neuen Rekord gibt
- Spiele 5 Runden und zeige danach deine Durchschnittszeit
🚀 Baue dieses Projekt mit Codey: Öffne codey.online/de/starter-kits/uno/projects/reaction-game und klicke auf BAU DAS. Dann sind der Code und der Schaltplan sofort bereit.
Codey Online ist ein Produkt von OTRONIC