CONTENIDO ►
El juego Arduino con LED y pulsadores «Repetir secuencia» es otro miniproyecto con un conjunto mínimo de componentes necesarios. Para montar el circuito del proyecto sólo necesitas una protoboard, conectores, botones y LEDs con resistencias. Pulsando los botones, el jugador debe repetir la secuencia de encendido de los LED. Con cada nuevo nivel, la velocidad del juego (encendido de los LED) aumentará gradualmente.
Para esta actividad necesitaremos:
- Arduino Uno / Arduino Nano / Arduino Mega
- pulsadores
- LEDs y resistencias de 220 Ohm
- zumbador
- placa de pruebas
- cables de conexion
Juego Arduino con LEDs Repetición de secuencia

Los LED se conectan al microcontrolador Arduino en serie desde el puerto digital 2 al 6, los botones se conectan a las entradas analógicas de A0 a A4. Los puertos de conexión de los botones y LEDs se pueden cambiar fácilmente especificándolos en el sketch. Sólo 10 combinaciones se utilizan en el programa, se colocan en char* kod[] array. Es posible añadir nuevas combinaciones al array si se desea y cada LED sólo debe activarse una vez.
Programa Arduino Juego «Repetición de secuencia»
// puerto de conexión del zumbador #define buzzer 11 // puerto de conexión LEDs int led[] = { 2, 3, 4, 5, 6 }; // puertos de conexión de los botones int but[] = { A0, A1, A2, A3, A4 }; // opciones de combinación (puede añadir las suyas propias) char* kod[] = { "01324", "40231", "02413", "03241", "40312", "14320", "13402", "12304", "41203", "10423" }; int del = 1000; int w = -1; byte level = 1; byte b1, b2, b3, b4, b5; String KOD, OTV, A; byte num_led = sizeof(led) / sizeof(int*); byte num_but = sizeof(but) / sizeof(int*); byte num_cod = sizeof(kod) / sizeof(char*); byte len = strlen(kod[0]); boolean button1WasUp = true; boolean button2WasUp = true; boolean button3WasUp = true; boolean button4WasUp = true; boolean button5WasUp = true; void setup() { pinMode(buzzer, OUTPUT); // configurar los puertos para los LED for (byte i = 0; i <= num_led; i++) { pinMode(led[i], OUTPUT); } // configurar los puertos para los botones for (byte i = 0; i <= num_but; i++) { pinMode(but[i], INPUT_PULLUP); } Serial.begin(9600); Serial.println("LEVEL - " + String(level)); Serial.println(""); } void loop() { // seleccionar al azar una de las combinaciones while (w == -1) { int x = random(0, num_cod - 1); KOD = {kod[x]}; b1 = 0; b2 = 0; b3 = 0; b4 = 0; b5 = 0; w = 0; } // encender los LED en función de la combinación while (w <= len - 1) { A = KOD[w]; int a = A.toInt(); digitalWrite(led[a], HIGH); tone(buzzer, 5 * led[a]); delay(10); noTone(buzzer); delay(del); digitalWrite(led[a], LOW); w++; } // esperar a que se pulsen todos los botones while (w >= len - 1 and w <= len + len) { boolean button1IsUp = digitalRead(but[0]); boolean button2IsUp = digitalRead(but[1]); boolean button3IsUp = digitalRead(but[2]); boolean button4IsUp = digitalRead(but[3]); boolean button5IsUp = digitalRead(but[4]); if (b1 == 0 and button1WasUp and !button1IsUp) { delay(10); button1IsUp = digitalRead(but[0]); if (!button1IsUp) { tone(buzzer, 5 * led[0]); delay(10); noTone(buzzer); OTV = OTV + "0"; digitalWrite(led[0], HIGH); b1 = 1; w++; } } button1WasUp = button1IsUp; if (b2 == 0 and button2WasUp and !button2IsUp) { delay(10); button2IsUp = digitalRead(but[1]); if (!button2IsUp) { tone(buzzer, 5 * led[1]); delay(10); noTone(buzzer); OTV = OTV + "1"; digitalWrite(led[1], HIGH); b2 = 1; w++; } } button2WasUp = button2IsUp; if (b3 == 0 and button3WasUp and !button3IsUp) { delay(10); button3IsUp = digitalRead(but[2]); if (!button3IsUp) { tone(buzzer, 5 * led[2]); delay(10); noTone(buzzer); OTV = OTV + "2"; digitalWrite(led[2], HIGH); b3 = 1; w++; } } button3WasUp = button3IsUp; if (b4 == 0 and button4WasUp and !button4IsUp) { delay(10); button4IsUp = digitalRead(but[3]); tone(buzzer, 5 * led[3]); delay(10); noTone(buzzer); if (!button4IsUp) { OTV = OTV + "3"; digitalWrite(led[3], HIGH); b4 = 1; w++; } } button4WasUp = button4IsUp; if (b5 == 0 and button5WasUp and !button5IsUp) { delay(10); button5IsUp = digitalRead(but[4]); tone(buzzer, 5 * led[4]); delay(10); noTone(buzzer); if (!button5IsUp) { OTV = OTV + "4"; digitalWrite(led[4], HIGH); b5 = 1; w++; } } button5WasUp = button5IsUp; // si la combinación coincide, comienza un nuevo nivel if (w == len + len and OTV == KOD) { Serial.println(""); Serial.println("SI!"); Serial.println(""); level++; Serial.println("LEVEL - " + String(level)); del = del - 100; if (del < 10) { del = 100; } delay(1000); for (byte i = 0; i <= num_led; i++) { digitalWrite(led[i], LOW); } delay(2000); KOD = ""; OTV = ""; w = -1; } // si la combinación es incorrecta, establece una nueva if (w == len + len and OTV != KOD) { Serial.println(""); Serial.println("NO!"); Serial.println(""); tone(buzzer, 100); delay(1000); noTone(buzzer); Serial.println("LEVEL - " + String(level)); for (byte i = 0; i <= num_led; i++) { digitalWrite(led[i], LOW); } delay(2000); KOD = ""; OTV = ""; w = -1; } } }
Explicación del código para juego «Repetición de secuencia»:
- después del nivel 10, la velocidad de conmutación de los LED ya no aumenta;
- los puertos para conectar botones y LED pueden cambiarse en el software.
Conclusión. El nivel actual en el juego se muestra en el monitor del puerto IDE de Arduino. Si la secuencia se introduce incorrectamente, se oirá un pitido en el altavoz piezoeléctrico. Otro proyecto de juego Aduino Uno r3 con pulsadores y LEDs se puede encontrar aquí – Jugar a Adivina el código. Si tienes alguna pregunta sobre el programa o sobre el montaje del circuito para el juego «Repetir Secuencia» – déjalas en los comentarios a este post.

Hola, muy buenas noches.
Quería preguntar que significa OTV en la programación, ya que busque y no me salió ningún resultado, tambien queria saber que es lo que hace en el codigo, que función cumple y eso…también lo de byte, tengo algunas dudas, así que si puede explicarme para que está se lo agradecería, lo demás puedo entenderlo, gracias.!
OTV es un tipo de datos «String» en el que se almacenan los números cuando se pulsan los botones. Por ejemplo, cuando se pulsa el primer botón, el número «0» se añade a la cadena – OTV = OTV + «0»;
Muchas gracias ! Señor admin:-)