⭐⭐ Principiante avanzado
⏱️ 25 minutos
Juego de reacción
¿Qué tan rápido eres? Espera hasta que el LED se encienda y pulsa el botón lo más rápido que puedas. La pantalla muestra tu tiempo en milisegundos. ¡Reta a tus amigos!
🧰 ¿Qué necesitas?
💡
1× LED (lucecita)
🔌
Cable USB + Cables jumper🗺️ Esquema de conexión
Sigue los cables desde el Arduino hasta cada pieza. Puedes elegir tú los colores de los cables.
| Desde | Hasta |
|---|---|
Arduino UNO · D2 |
Pulsador · 1 |
Pulsador · 2 |
Arduino UNO · GND |
Arduino UNO · D13 |
Resistencia 220 Ω · 1 |
Resistencia 220 Ω · 2 |
LED (lucecita) · ANODE |
LED (lucecita) · CATHODE |
Arduino UNO · GND |
Arduino UNO · A4 |
Pantallita OLED 0,91" · SDA |
Arduino UNO · A5 |
Pantallita OLED 0,91" · SCL |
Arduino UNO · 5V |
Pantallita OLED 0,91" · VCC |
Arduino UNO · GND |
Pantallita OLED 0,91" · GND |
🛠️ Así lo construyes
- Pon el pulsador sobre la ranura del breadboard: una patita al pin 2 y una patita del otro lado a GND.
- Pon el LED con una resistencia de 220 Ω en el pin 13, con la patita corta a GND.
- Conecta la pantalla OLED: SDA a A4, SCL a A5, VCC a 5V y GND a GND.
💻 El código
// Juego de reaccion
// Espera a que el LED se encienda y pulsa el boton lo mas rapido posible.
// La pantalla muestra que tan rapido fuiste!
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
const int BOTON_PIN = 2; // Pulsador en pin 2 (otro lado a GND)
const int LED_PIN = 13; // LED en pin 13 (por la resistencia)
Adafruit_SSD1306 pantalla(128, 32, &Wire, -1); // OLED: SDA = A4, SCL = A5
unsigned long mejorTiempo = 0; // Tu tiempo mas rapido hasta ahora
// Pone un texto grande en la pantalla
void mostrar(const __FlashStringHelper* texto, unsigned long numero) {
pantalla.clearDisplay();
pantalla.setTextSize(1);
pantalla.setCursor(0, 0);
pantalla.print(texto);
if (numero > 0) {
pantalla.setTextSize(2);
pantalla.setCursor(0, 14);
pantalla.print(numero);
pantalla.print(F(" ms"));
}
pantalla.display();
}
void setup() {
pinMode(BOTON_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
randomSeed(analogRead(A0)); // Da tiempos de espera realmente al azar
pantalla.begin(SSD1306_SWITCHCAPVCC, 0x3C);
pantalla.setTextColor(SSD1306_WHITE);
}
void loop() {
mostrar(F("Pulsa el boton..."), 0);
while (digitalRead(BOTON_PIN) == HIGH); // Espera hasta que pulses el boton
while (digitalRead(BOTON_PIN) == LOW); // ...y lo sueltes otra vez
mostrar(F("Listo? Mira LED!"), 0);
delay(random(2000, 5000)); // Un tiempo secreto entre 2 y 5 segundos
if (digitalRead(BOTON_PIN) == LOW) { // Pulsaste antes? Tramposo!
mostrar(F("Muy pronto! Otra."), 0);
delay(2000);
return;
}
digitalWrite(LED_PIN, HIGH); // AHORA!
unsigned long start = millis();
while (digitalRead(BOTON_PIN) == HIGH); // Esperando tu pulsacion
unsigned long tiempo = millis() - start;
digitalWrite(LED_PIN, LOW);
if (mejorTiempo == 0 || tiempo < mejorTiempo) {
mejorTiempo = tiempo;
mostrar(F("NUEVO RECORD!"), tiempo);
} else {
mostrar(F("Tu tiempo:"), tiempo);
}
delay(3000);
}
🧠 ¿Qué hace el código?
- Después de pulsar el botón, esperamos un tiempo secreto entre 2 y 5 segundos (
random()). - Luego el LED se enciende y ponemos en marcha un cronómetro con
millis(). - Cuando pulsas, calculamos cuántos milisegundos tardaste. Guardamos tu mejor tiempo.
🎯 Prueba esto…
- Haz un juego para dos jugadores, cada uno con su propio botón
- Haz que un zumbador pite cuando haya un nuevo récord
- Juega 5 rondas y luego muestra tu tiempo medio
🚀 Construye este proyecto con Codey: abre codey.online/es/starter-kits/uno/projects/reaction-game y haz clic en HAZ ESTO. Entonces el código y el esquema de conexión estarán listos enseguida.
Codey Online es un producto de OTRONIC