int leds[]={4,5,11,12};
int botones[]={2,3,9,10};
int buzzer=7;
int tono[]={196,262,330,784};
int secuencia[20]={0};
int indice=0;
void setup() {
for(int i=0;i<4;i++){
pinMode(leds[i],OUTPUT);
pinMode(botones[i], INPUT_PULLUP);
}
pinMode(buzzer, OUTPUT);
randomSeed(analogRead(A0));
Serial.begin(9600);
}
void loop() {
secuencia[indice]=random(0,4);
indice++;
if(indice>=20){
indice=9;}
secuenciaJuego();
if(!secuenciaJugador()){
finJuego();}
delay(300);
if(indice>0){
sonidoLevelUp();
delay(300);}
}
//Función para encender los leds
void enciendeLed(int led){
digitalWrite(leds[led], HIGH);
tone(buzzer,tono[led]);
delay(300);
digitalWrite(leds[led],LOW);
noTone(buzzer);
}
//Función para la secuencia a repetir
void secuenciaJuego(){
for(int i=0; i<indice; i++){
int ledActual=secuencia[i];
enciendeLed(ledActual);
delay(50);
}
}
//Función para leer los botones
int leeBoton(){
while (true){
for(int i=0;i<4;i++){
int btn=botones[i];
if(digitalRead(btn)==LOW){
return i;
}}
delay(1);
}
}
//Función para secuencia de Jugador
bool secuenciaJugador(){
for(int i=0; i<indice; i++){
int btnSecuencia=secuencia[i];
int btnJugador=leeBoton();
enciendeLed(btnJugador);
//Compara si las secuencias son diferentes
if(btnJugador!=btnSecuencia){
return false;
} }
return true;
}
//Función sonido aumento de Nivel
void sonidoLevelUp(){
tone(buzzer,330); delay(150);
tone(buzzer,392); delay(150);
tone(buzzer,659); delay(150);
tone(buzzer,523); delay(150);
tone(buzzer,587); delay(150);
tone(buzzer,784); delay(150);
noTone(buzzer);
}
//Función sonido Fin de Juego
void sonidoFin(){
tone(buzzer,622); delay(300);
tone(buzzer,587); delay(300);
tone(buzzer,554); delay(300);
for(int i=0;i<10;i++){
for(int j=-10;j<=10;j++){
tone(buzzer,523+j);
delay(5);
} }
noTone(buzzer);
delay(300);
}
//Función para Fin de juego
void finJuego(){
Serial.println("Fin del juego");
Serial.print("Puntaje: ");
Serial.println(indice-1);
indice=0;
delay(200);
sonidoFin();
}