⭐⭐ Początkujący plus
⏱️ 25 minut
Gra na refleks
Jak szybki jesteś? Poczekaj, aż LED się zaświeci. Potem jak najszybciej naciśnij przycisk. Ekran pokaże twój czas w milisekundach. Rzuć wyzwanie znajomym!
🧰 Czego potrzebujesz?
💡
1× LED (lampka)
🔌
Kabel USB + Przewody połączeniowe🗺️ Schemat podłączenia
Poprowadź przewody od Arduino do każdej części. Kolory przewodów możesz wybrać samodzielnie.
| Od | Do |
|---|---|
Arduino UNO · D2 |
Przycisk · 1 |
Przycisk · 2 |
Arduino UNO · GND |
Arduino UNO · D13 |
Rezystor 220 Ω · 1 |
Rezystor 220 Ω · 2 |
LED (lampka) · ANODE |
LED (lampka) · CATHODE |
Arduino UNO · GND |
Arduino UNO · A4 |
Ekranik OLED 0,91" · SDA |
Arduino UNO · A5 |
Ekranik OLED 0,91" · SCL |
Arduino UNO · 5V |
Ekranik OLED 0,91" · VCC |
Arduino UNO · GND |
Ekranik OLED 0,91" · GND |
🛠️ Tak to zbudujesz
- Włóż przycisk nad rowkiem breadboardu: jedna nóżka do pin 2, nóżka po drugiej stronie do GND.
- Podłącz LED z rezystorem 220 Ω do pin 13, krótszą nóżkę do GND.
- Podłącz ekran OLED: SDA do A4, SCL do A5, VCC do 5V i GND do GND.
💻 Kod
// Gra na refleks
// Poczekaj, aż LED się włączy, i naciśnij przycisk jak najszybciej.
// Ekran pokaże, jak szybki byłeś!
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
const int PRZYCISK_PIN = 2; // Przycisk na pin 2 (druga strona do GND)
const int LED_PIN = 13; // LED na pin 13 (przez rezystor)
Adafruit_SSD1306 ekran(128, 32, &Wire, -1); // OLED: SDA = A4, SCL = A5
unsigned long najlepszyCzas = 0; // Twój najszybszy czas do tej pory
// Pokaż duży tekst na ekranie
void pokaz(const __FlashStringHelper* gora, unsigned long liczba) {
ekran.clearDisplay();
ekran.setTextSize(1);
ekran.setCursor(0, 0);
ekran.print(gora);
if (liczba > 0) {
ekran.setTextSize(2);
ekran.setCursor(0, 14);
ekran.print(liczba);
ekran.print(F(" ms"));
}
ekran.display();
}
void setup() {
pinMode(PRZYCISK_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
randomSeed(analogRead(A0)); // Daje naprawdę losowe czasy czekania
ekran.begin(SSD1306_SWITCHCAPVCC, 0x3C);
ekran.setTextColor(SSD1306_WHITE);
}
void loop() {
pokaz(F("Nacisnij przycisk"), 0);
while (digitalRead(PRZYCISK_PIN) == HIGH); // Czekamy, aż naciśniesz przycisk
while (digitalRead(PRZYCISK_PIN) == LOW); // ...i znowu go puścisz
pokaz(F("Gotow? Patrz na LED!"), 0);
delay(random(2000, 5000)); // Tajny czas czekania od 2 do 5 sekund
if (digitalRead(PRZYCISK_PIN) == LOW) { // Za wcześnie naciśnięte? Oszust!
pokaz(F("Za szybko! Jeszcze"), 0);
delay(2000);
return;
}
digitalWrite(LED_PIN, HIGH); // TERAZ!
unsigned long start = millis();
while (digitalRead(PRZYCISK_PIN) == HIGH); // Czekamy na twoje naciśnięcie
unsigned long czas = millis() - start;
digitalWrite(LED_PIN, LOW);
if (najlepszyCzas == 0 || czas < najlepszyCzas) {
najlepszyCzas = czas;
pokaz(F("NOWY REKORD!"), czas);
} else {
pokaz(F("Twoj czas:"), czas);
}
delay(3000);
}
🧠 Co robi kod?
- Po naciśnięciu przycisku czekamy tajny czas od 2 do 5 sekund (
random()). - Potem LED się włącza i startujemy stoper z
millis(). - Gdy naciśniesz, liczymy, ile milisekund to trwało. Zapamiętujemy twój najlepszy czas.
🎯 Spróbuj…
- Zrób z tego grę dla dwóch graczy, każdy z własnym przyciskiem
- Niech buzzer zapiszczy przy nowym rekordzie
- Zagraj 5 rund, a potem pokaż swój średni czas
🚀 Zbuduj ten projekt z Codey: otwórz codey.online/pl/starter-kits/uno/projects/reaction-game i kliknij ZRÓB TO. Wtedy kod i schemat podłączenia będą od razu gotowe.
Codey Online to produkt od OTRONIC