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

También te podría gustar...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *