Inicio >> Proyectos >> El juego de Simón con Arduino >> Parte 4

Hemos llegado al final de nuestro proyecto con Arduino. Con esta última parte comletamos el juego de Simón.

Si completaste la parte 3 del proyecto recordarás que cuando el juego terminaba se imprimía en la consola el mensaje «WIN» cuando el jugador ganaba y «FAIL» cuando perdía. Esto no es muy visual para el jugador, así que vamos a hacer que los LEDS se iluminen 3 veces de forma consecutiva cuando gane y que parpadeé el LED rojo cuando pierda. Así el jugador sabrá que el juego ha terminado y el resultado.

Funciones

Vamos a definir dos nuevas funciones: printWin y printFail. La primera la llamaremos cuando el jugador gane y la segunda cuando el jugador pierda. 

Función printWin

La función printWin hará que todos los LEDs se iluminen de forma consecutiva 3 veces. Esa es la señal de victoria:

void printWin(){
  for(int i=0; i<3; i++){
    for(int j=0; j<SIZE; j++){
      digitalWrite(LEDS[j], HIGH);
      delay(500);
      digitalWrite(LEDS[j], LOW);
    }
  }
}

Como puedes ver hay dos bucles for porque lo que buscamos es hacer una secuencia de luces así que necesito repeticiones.

El primer for es el encargado de repetir la secuencia 3 veces. Si quieres repetir la secuencia un número distinto de veces simplemente cambia ese valor.

El segundo for es el responsable de hacer la secuencia. La idea es que todos los LEDs se iluminen en orden, por eso utilizamos la constante SIZE, que si recuerdas es el número de LEDs. El índice de este for nos sirve para acceder al array LEDS que contiene los pines digitales en los que están los LEDs conectados. Recuerda que esto lo definimos en la parte 1 del proyecto.

Dentro del for simplemente llamamos a digitalWrite, primero con estado HIGH y después de medio segundo (delay(500)) con estado LOW. De esa forma encendemos y apagamos el LED de la posición j del array. Como esto se repite por cada valor de j, el resultado será que se encenderán y apagarán todos los LEDs en el orden en el que están declarados en el array LEDS.

Función printFail

La función printFail hará que el LED rojo parpadee 3 veces. Esa es la señal de que el jugador ha perdido:

void printFail(){
  for(int i=0; i<3; i++){
    digitalWrite(LED_RED, HIGH);
    delay(500);
    digitalWrite(LED_RED, LOW);
    delay(500);
  }
}

Ya hemos visto anteriormente cómo hacer que un LED parpadeé, por lo que esta función no debería tener mucho misterio.

Gracias al bucle for el parpadeo se hace 3 veces. Si prefieres que parpadeé más o menos veces simplemente cambia ese valor.

El resto es simple, encendemos el LED rojo (LED_RED) durante medio segundo usando digitalWrite(LED_RED, HIGH) y lo apagamos también medio segundo con digitalWrite(LED_RED, LOW).

Función loop

Ya casi hemos terminado, solo nos falta utilizar estas nuevas funciones que acabamos de definir.

En la función loop hay una instrucción if-else que comprueba si el jugador ha ganado o ha perdido:

if(ok){
  Serial.println("WIN!!!!!");
}else{
  Serial.println("FAIL!!!!!");
}

Vamos a modificarla para que, en vez de mostrar por consola el resultado, llame a las funciones que acabamos de definir:

if(ok){
  printWin();
}else{
  printFail();
}

Y con este último cambio tendríamos el juego terminado.

Puedes descargar el sketch completo aquí.

Espero que hayas conseguido completar el proyecto y que te haya gustado. ¡Te espero en el próximo!