⭐⭐ Gevorderde beginner
⏱️ 25 minuten
Reactiespel
Hoe snel ben jij? Wacht tot de LED aangaat en druk dan zo snel mogelijk op de knop. Het scherm laat je tijd zien in milliseconden. Daag je vrienden uit!
🧰 Wat heb je nodig?
💡
1× LED (lampje)
🔌
USB-kabel + Jumperkabels🗺️ Aansluitschema
Volg de draden van de Arduino naar elk onderdeel. De kleuren van de draden mag je zelf kiezen.
| Van | Naar |
|---|---|
Arduino UNO · D2 |
Drukknop · 1 |
Drukknop · 2 |
Arduino UNO · GND |
Arduino UNO · D13 |
Weerstand 220 Ω · 1 |
Weerstand 220 Ω · 2 |
LED (lampje) · ANODE |
LED (lampje) · CATHODE |
Arduino UNO · GND |
Arduino UNO · A4 |
OLED-schermpje 0,91" · SDA |
Arduino UNO · A5 |
OLED-schermpje 0,91" · SCL |
Arduino UNO · 5V |
OLED-schermpje 0,91" · VCC |
Arduino UNO · GND |
OLED-schermpje 0,91" · GND |
🛠️ Zo bouw je het
- Zet de drukknop over de gleuf van het breadboard: één pootje naar pin 2, een pootje aan de andere kant naar GND.
- Zet de LED met een weerstand van 220 Ω op pin 13, het korte pootje naar GND.
- Sluit het OLED-scherm aan: SDA naar A4, SCL naar A5, VCC naar 5V en GND naar GND.
💻 De code
// Reactiespel
// Wacht tot de LED aangaat en druk dan zo snel mogelijk op de knop.
// Het scherm laat zien hoe snel je was!
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
const int KNOP_PIN = 2; // Drukknop op pin 2 (andere kant naar GND)
const int LED_PIN = 13; // LED op pin 13 (via de weerstand)
Adafruit_SSD1306 scherm(128, 32, &Wire, -1); // OLED: SDA = A4, SCL = A5
unsigned long besteTijd = 0; // Je snelste tijd tot nu toe
// Zet een tekst groot op het scherm
void toon(const __FlashStringHelper* boven, unsigned long getal) {
scherm.clearDisplay();
scherm.setTextSize(1);
scherm.setCursor(0, 0);
scherm.print(boven);
if (getal > 0) {
scherm.setTextSize(2);
scherm.setCursor(0, 14);
scherm.print(getal);
scherm.print(F(" ms"));
}
scherm.display();
}
void setup() {
pinMode(KNOP_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
randomSeed(analogRead(A0)); // Zorgt voor echt willekeurige wachttijden
scherm.begin(SSD1306_SWITCHCAPVCC, 0x3C);
scherm.setTextColor(SSD1306_WHITE);
}
void loop() {
toon(F("Druk op de knop..."), 0);
while (digitalRead(KNOP_PIN) == HIGH); // Wachten tot je de knop indrukt
while (digitalRead(KNOP_PIN) == LOW); // ...en weer loslaat
toon(F("Klaar? Let op de LED!"), 0);
delay(random(2000, 5000)); // Een geheime wachttijd tussen 2 en 5 seconden
if (digitalRead(KNOP_PIN) == LOW) { // Te vroeg gedrukt? Valsspeler!
toon(F("Te vroeg! Opnieuw."), 0);
delay(2000);
return;
}
digitalWrite(LED_PIN, HIGH); // NU!
unsigned long start = millis();
while (digitalRead(KNOP_PIN) == HIGH); // Wachten op jouw druk
unsigned long tijd = millis() - start;
digitalWrite(LED_PIN, LOW);
if (besteTijd == 0 || tijd < besteTijd) {
besteTijd = tijd;
toon(F("NIEUW RECORD!"), tijd);
} else {
toon(F("Jouw tijd:"), tijd);
}
delay(3000);
}
🧠 Wat doet de code?
- Na een druk op de knop wachten we een geheime tijd tussen 2 en 5 seconden (
random()). - Dan gaat de LED aan en starten we een stopwatch met
millis(). - Als je drukt, rekenen we uit hoeveel milliseconden het duurde. Je beste tijd onthouden we.
🎯 Probeer eens…
- Maak er een spel voor twee spelers van, met elk een eigen knop
- Laat een zoemer piepen bij een nieuw record
- Speel 5 rondes en laat daarna je gemiddelde tijd zien
🚀 Bouw dit project met Codey: open codey.online/nl/starter-kits/uno/projects/reaction-game en klik op MAAK DIT. Dan staan de code en het aansluitschema meteen klaar.
Codey Online is een product van OTRONIC