miniatura simon dice

Minijuego con Arduino: 鈥淪im贸n dice!鈥

驴Sim贸n dice? Sim贸n dice, 驴Conoc铆as este juego? Conoc铆as este juego, 驴Has jugado? Has jugado, 驴Paro? Paro. Vale, ya paro, pero esto no es m谩s que una demostraci贸n de este famoso mini juego con Arduino. Ni m谩s ni menos que SIMON DICE. Juego m铆tico donde los haya, ahora disponible en Arduino.

Si te interesa como realizar este proyecto de forma muy f谩cil y r谩pida, qu茅date en esta pagina. 驴Empezamos? Empezamos

Explicaci贸n y funcionamieinto del minijuego Sim贸n Dice

No me creo que haya alguien que no conoce el funcionamiento de este mini juego, aun as铆, aqu铆 tienes una explicaci贸n de como se juega.

B谩sicamente el juego consiste en memorizar la secuencia de leds que se va generando de forma aleatoria.

Una vez que la secuencia termina llega tu turno, en el cual tienes que replicar pulsando los botones la misma secuencia que se ha mostrado anteriormente. Hasta aqu铆 todo muy bien y muy f谩cil, 驴no?

Pues bueno, lo dif铆cil llega ahora, ya que cada secuencia que aciertas, la siguiente no solo va mas r谩pida, sino que tambi茅n es mas larga. 驴Cu谩ntas secuencias lograr谩s completar? 驴Te costar谩 mucho? 驴Ganar谩s a tus amigos?

Comprueba todo esto realizando el proyecto en Arduino y poni茅ndote a prueba! Vamos all谩.

Metariales y componentes empleados en la realizaci贸n del proyecto

Si s贸lo necesitas alguno de los componentes para realizar este producto. A continuaci贸n tienes una lista con los diferentes componentes para que no pierdas el tiempo buscando y comparando las mejores ofertas.

Si tienes alguna duda sobre los materiales que se utilizan en este proyecto, no dudes en dejar un comentario, te responderemos lo antes posible.

Kit iniciaci贸n ArduinoKit iniciaci贸n ArduinoESUS
Placa Arduino UnoPlaca Arduino UnoESUS
Cables Macho HembraCables Macho HembraESUS
Botones Electr贸nicaBotones Electr贸nicaESUS
BuzzerBuzzerESUS
Kit de resistenciasKit de resistenciasESUS
Kit de LEDsKit de LEDsESUS

Video paso a paso del proyecto

Si lo que buscas es ver de una forma mucho m谩s detallada de como realizar este proyecto desde el inicio hasta el final y una explicaci贸n del c贸digo, a continuaci贸n se muestra el video con dicho contenido, mucho mas visual y f谩cil de comprender. Y recuerda, si te gusta esta clase de contenido, no olvides聽suscribirte聽馃槈

Esquema de conexiones Arduino para minijuego Simon Dice

Queremos ponertelo muy f谩cil y accesibnle para que, independientemente de tu nivel con Arduino, puedas montar este minijuego. Es por ello que, para que te sea m谩s f谩cil de montar este proyecto, aqu铆 tienes el esquema de conexiones para el juego de Simon Dice.

Todas las conexiones de este esquema se corresponden con el c贸digo de programaci贸n que hay justo debajo, as铆 que aseg煤rate de que todas est谩n tal y como se muestra en esta imagen.

esquema arduino simon dice minijuego

C贸digo de Arduino para la programaci贸n del proyecto

A continuaci贸n se muestra el c贸digo de Arduino desarrollado espec铆ficamente para este mini juego de Simon Dice. Los pines usados en el c贸digo se corresponden con los pines que encontrar谩s en el esquema de conexiones previamente mostrado.Si quieres una explicaci贸n m谩s detallada de las diferentes partes del c贸digo empleado para programar esta gr煤a y de su funcionamiento, te recomiendo que te veas el video que te hemos dejado m谩s arriba.

Si tienes dudas sobre c贸mo usar o instalar el entorno de programaci贸n empleado para Arduino, te dejamos un link de聽com贸 descargar el IDE de Arduino

//Canal de YouTube -> RobotUNO
//Juego Simon dice
#define   BUZZER   7
#define   ENTRADA_A  13
#define   ENTRADA_B  12
#define   ENTRADA_C  11
#define   ENTRADA_D  10
#define   SALIDA_A   2
#define   SALIDA_B   3
#define   SALIDA_C   4
#define   SALIDA_D   5
int melodia[ ] = {262, 196, 196, 220, 196, 0, 247, 262};
int duracionNotas[] = {4, 8, 8, 4, 4, 4, 4, 4};
int nivelActual = 1;
int velocidad = 500;
const int NIVEL_MAX = 100;
int secuencia[NIVEL_MAX];
int secuenciaUsuario[NIVEL_MAX];
void setup(){
   pinMode(ENTRADA_D, INPUT);
   pinMode(ENTRADA_C, INPUT);
   pinMode(ENTRADA_B, INPUT);
   pinMode(ENTRADA_A, INPUT);
   pinMode(SALIDA_A, OUTPUT);
   pinMode(SALIDA_B, OUTPUT);
   pinMode(SALIDA_C, OUTPUT);
   pinMode(SALIDA_D, OUTPUT);
   digitalWrite(SALIDA_A, LOW);
   digitalWrite(SALIDA_B, LOW);
   digitalWrite(SALIDA_C, LOW);
   digitalWrite(SALIDA_D, LOW);
}
void loop(){
   if(nivelActual == 1){
      generaSecuencia();
      muestraSecuencia();
      leeSecuencia();
   }
   if(nivelActual != 1){
      muestraSecuencia();
      leeSecuencia();
   }
}
void muestraSecuencia(){
   digitalWrite(SALIDA_A, LOW);
   digitalWrite(SALIDA_B, LOW);
   digitalWrite(SALIDA_C, LOW);
   digitalWrite(SALIDA_D, LOW);
   for(int i = 0; i < nivelActual; i++){
      if( secuencia[i] == SALIDA_A ){
         tone(BUZZER, 200);
         delay(200);
         noTone(BUZZER);
      }
      if( secuencia[i] == SALIDA_B ){
         tone(BUZZER, 300);
         delay(200);
         noTone(BUZZER);
      }
      if( secuencia[i] == SALIDA_C ){
         tone(BUZZER, 400);
         delay(200);
         noTone(BUZZER);
      }
      if( secuencia[i] == SALIDA_D ){
         tone(BUZZER, 500);
         delay(200);
         noTone(BUZZER);
      }
      digitalWrite(secuencia[i], HIGH);
      delay(velocidad);
      digitalWrite(secuencia[i], LOW);
      delay(200);
   }
}
void leeSecuencia(){
   int flag = 0;
   for(int i = 0; i < nivelActual; i++){
      flag = 0;
      while(flag == 0){
         if(digitalRead(ENTRADA_D) == LOW){
            digitalWrite(SALIDA_D, HIGH);
            tone(BUZZER, 500);
            delay(300);
            noTone(BUZZER);
            secuenciaUsuario[i] = SALIDA_D;
            flag = 1;
            delay(200);
            if(secuenciaUsuario[i] != secuencia[i]){
               secuenciaError();
               return;
            }
            digitalWrite(SALIDA_D, LOW);
         }
         if(digitalRead(ENTRADA_C) == LOW){
            digitalWrite(SALIDA_C, HIGH);
            tone(BUZZER, 400);
            delay(300);
            noTone(BUZZER);
            secuenciaUsuario[i] = SALIDA_C;
            flag = 1;
            delay(200);
            if(secuenciaUsuario[i] != secuencia[i]){
               secuenciaError();
               return;
            }
            digitalWrite(SALIDA_C, LOW);
         }
         if(digitalRead(ENTRADA_B) == LOW){
            digitalWrite(SALIDA_B, HIGH);
            tone(BUZZER, 300);
            delay(300);
            noTone(BUZZER);
            secuenciaUsuario[i] = SALIDA_B;
            flag = 1;
            delay(200);
            if(secuenciaUsuario[i] != secuencia[i]){
               secuenciaError();
               return;
            }
            digitalWrite(SALIDA_B, LOW);
         }
         if(digitalRead(ENTRADA_A) == LOW){
            digitalWrite(SALIDA_A, HIGH);
            tone(BUZZER, 200);
            delay(300);
            noTone(BUZZER);
            secuenciaUsuario[i] = SALIDA_A;
            flag = 1;
            delay(200);
            if(secuenciaUsuario[i] != secuencia[i]){
               secuenciaError();
               return;
            }
            digitalWrite(SALIDA_A, LOW);
         }
      }
   }
   secuenciaCorrecta();
}
void generaSecuencia(){
   randomSeed(millis());
   for(int i = 0; i < NIVEL_MAX; i++){
      secuencia[i] = random(2,6);
   }
}
void melodiaError(){
   for(int i = 0; i < 8; i++){
      int duracionNota = 1000/duracionNotas[i];
      tone(BUZZER, melodia[i],duracionNotas);
      int pausaEntreNotas = duracionNota * 1.30;
      delay(pausaEntreNotas);
      noTone(BUZZER);
   }
}
void secuenciaError(){
   digitalWrite(SALIDA_A, HIGH);
   digitalWrite(SALIDA_B, HIGH);
   digitalWrite(SALIDA_C, HIGH);
   digitalWrite(SALIDA_D, HIGH);
   delay(250);
   digitalWrite(SALIDA_A, LOW);
   digitalWrite(SALIDA_B, LOW);
   digitalWrite(SALIDA_C, LOW);
   digitalWrite(SALIDA_D, LOW);
   delay(250);
   melodiaError();
   nivelActual = 1;
   velocidad = 500;
}
void secuenciaCorrecta(){
   if(nivelActual < NIVEL_MAX);
      nivelActual++;
   velocidad -= 50;
   delay(200);
}

Lo que debes de hacer para utilizar este c贸digo es muy sencillo, simplemente tienes que copiarlo y pegarlo en tu compilador de Arduino (por ejemplo, Arduino IDE). Si no lo tienes instalado, haz click aqu铆 para ver un tutorial sobre como instal谩rtelo de forma totalmente gratuita.Si tienes cualquier duda, deja un comentario en esta pagina y te responderemos lo antes posible.

Publicado en Proyectos con Arduino, Proyectos con LEDs, Proyectos de electr贸nica, Proyectos minijuegos.

14 Comentarios

  1. Hola!!
    Tus videos son geniales!! FELICITACIONES
    Quisiera saber si podr铆as pasarme el c贸digo para un dsPIC33FJ32GP204, usa lenguaje C. Por favor

  2. Pingback: canadian pharmacy uk delivery

  3. hola鈥 use el codigo que escribio arriba y me dice que no funciona, lo use en un programa llamado: TinkerCad y no me da el codigo

    podria ayudarme por favor.

    • Yo utilizo Arduino IDE. No se si eso cambia algo鈥 No se usar tinkercad, perdon

  4. Hola necesito ayudaaa, cuando le doy energia a la placa comienza a sonar la cancion de partida fallida y por mas que lo reinicie o resetee no funciona helppp

  5. Me encanta! Es genial poder hacer nuestro propio 鈥淪imon鈥, y poder trastear con todos los par谩metros para hacerlo m谩s f谩cil / dif铆cil, como la duraci贸n del tiempo cuando se muestra la secuencia, que cada vez vaya m谩s r谩pido o siempre tarde lo mismo en mostrar la secuencia, as铆 como modificar la melod铆a de fracaso鈥
    Muy buen proyecto, bien explicado e ingenioso. Felicitaciones!

Los comentarios est谩n cerrados.