Simón dice Arduino
Miembros del grupo
Adrián Sanz Hervás
Baldomero Rodríguez Árbol
Nelson Gabriel Arze Martínez
Raúl de la Fuente Carrasco
INFORMACIÓN SOBRE EL PROYECTO
El proyecto elegido por el grupo 22 es un Simón Dice. El juego se basa en una repetición de
luces de distintos colores, el jugador deberá repetir la misma secuencia de colores en el
mismo orden.
El proyecto tiene otras funciones implementadas para hacerlo más complejo, estas son:
– Dos tipos distintos de dificultades:
– Número de colores: El jugador podrá elegir si hacer el juego con tres o cuatro
colores diferentes.
– Tiempo entre luces: La cantidad de tiempo que habrá entre luz y luz en cada
secuencia del juego.
– Un timbre que sonará de forma distinta si se ha acertado o se ha fallado la
secuencia de colores. Además el timbre sonará al principio de cada ronda.
– Un botón para reiniciar el juego en caso de que se quisiera hacer por algún motivo.
– Las secuencias de colores son infinitas hasta que el jugador falle una secuencia.
Memoria ejecutiva del proyecto
Código empleado
#include <stdlib.h> //Inicialización del array de colores int game[100]; int lon = 0; bool playing = true; bool pulsado = false; int rand (void); //Adjudicación de puertos a los botones const int buttonRed = 6; const int buttonGreen = 2; const int buttonBlue = 3; const int buttonYellow = 4; const int buttonPurple = 5; //Inicialización del estado de los botones int botonTest = 0; int buttonStateRed = 0; int buttonStateGreen = 0; int buttonStateBlue = 0; int buttonStateYellow = 0; int buttonStatePurple = 0; //Adjudicación de puertos a los leds const int lampRed = 8; const int lampGreen = 9; const int lampBlue = 10; const int lampYellow = 11; const int lampPurple = 12; const int pinZumbador = 13; const int frecuencia = 220; //Electores de dificultad por defecto bool chosen = false; int wait = 500; int numLamps = 4; void setup() { Serial.begin(9600); Serial.write("start"); pinMode(lampRed , OUTPUT); pinMode(lampGreen , OUTPUT); pinMode(lampBlue , OUTPUT); pinMode(lampYellow , OUTPUT); pinMode(lampPurple , OUTPUT); } void loop() { playing = true; digitalWrite(lampPurple,HIGH); digitalWrite(lampRed,HIGH); digitalWrite(lampBlue,HIGH); chosen = false; while(!chosen){//Elector de dificultad botonTest = pressButton(); switch(botonTest){ case 1://ROJO digitalWrite(lampRed, HIGH); digitalWrite(lampGreen, LOW); numLamps = 4; break; case 2://VERDE digitalWrite(lampRed, LOW); digitalWrite(lampGreen, HIGH); numLamps = 3; break; case 3://AZUL digitalWrite(lampBlue, HIGH); digitalWrite(lampYellow, LOW); wait = 500; break; case 4://AMARILLO digitalWrite(lampBlue, LOW); digitalWrite(lampYellow, HIGH); wait = 200; break; case 5://LILA digitalWrite(lampRed, LOW); digitalWrite(lampGreen, LOW); digitalWrite(lampBlue, LOW); digitalWrite(lampYellow, LOW); digitalWrite(lampPurple, LOW); chosen = true; break; default: Serial.write("ERROR AL EMPEZAR"); } } while(playing){ Serial.write(" NUEVO CICLO "); //Serial.write("lila on "); tone(pinZumbador, frecuencia); digitalWrite(lampPurple,HIGH); delay(wait); //Serial.write("lila off "); digitalWrite(lampPurple,LOW); noTone(pinZumbador); delay(500); game[lon] = rand() % numLamps + 1; for(int i = 0; i < lon; i++){//RECORRE EL ARRAY DE COLORES ENCENDIENDO LEDS switch(game[i]){ case 1: //Serial.write("rojo on "); digitalWrite(lampRed,HIGH); delay(wait); //Serial.write("rojo off "); digitalWrite(lampRed,LOW); break; case 2: //Serial.write("verde on "); digitalWrite(lampGreen,HIGH); delay(wait); //Serial.write("verde off "); digitalWrite(lampGreen,LOW); break; case 3: //Serial.write("azul on "); digitalWrite(lampBlue,HIGH); delay(wait); //Serial.write("azul off "); digitalWrite(lampBlue,LOW); break; case 4: //Serial.write("amarillo on "); digitalWrite(lampYellow,HIGH); delay(wait); //Serial.write("amarillo off "); digitalWrite(lampYellow,LOW); break; default: Serial.write("ERROR AL ENCENDER LED "); } delay(wait); } for(int j = 0; j < lon; j++){ if(playing==true){ Serial.write("PREGUNTA"); botonTest = pressButton(); Serial.write("RESPONDIDO"); if(botonTest != game[j]){ Serial.write("FALLO"); tone(pinZumbador, 1000); delay(1000); noTone(pinZumbador); playing = false; lon = 0; } } } if(playing){ tone(pinZumbador, 500); delay(300); noTone(pinZumbador); delay(500); lon++; } } } bool down = false; bool up = false; int pressButton(){ int botonPulsado = 5; down = false; up = false; do{ //Serial.write("."); buttonStateRed = digitalRead(buttonRed); buttonStateGreen = digitalRead(buttonGreen); buttonStateBlue = digitalRead(buttonBlue); buttonStateYellow = digitalRead(buttonYellow); buttonStatePurple = digitalRead(buttonPurple); if(buttonStateGreen==HIGH){ Serial.write("boton verde pulsado"); botonPulsado = 2; down = true; }else if(buttonStateRed==HIGH){ Serial.write("boton rojo pulsado"); botonPulsado = 1; down = true; }else if(buttonStateBlue==HIGH){ Serial.write("boton azul pulsado"); botonPulsado = 3; down = true; }else if(buttonStateYellow==HIGH){ Serial.write("boton amarillo pulsado"); botonPulsado = 4; down = true; }else if(buttonStatePurple==HIGH){ Serial.write("boton lila pulsado"); botonPulsado = 5; down = true; } }while(!down); do{ //Serial.write("-"); buttonStateRed = digitalRead(buttonRed); buttonStateGreen = digitalRead(buttonGreen); buttonStateBlue = digitalRead(buttonBlue); buttonStateYellow = digitalRead(buttonYellow); buttonStatePurple = digitalRead(buttonPurple); if(buttonStateRed==LOW && buttonStateGreen==LOW && buttonStateBlue==LOW && buttonStateYellow==LOW && buttonStatePurple==LOW){ up = true; } }while(!up); //Serial.write("I"); return botonPulsado; }
Video de prueba con explicación