martes, 6 de mayo de 2014

Proyecto Concurso ArduinoDay - Segundo clasificado

Tras haber participado en el Concurso patrocinado por ECDA junto con Ardumarket.com, a continuación os ofrecemos el segundo clasificado.

Melodías.
Roger Marco Magraner


En mi proyecto he utilizado:

- Arduino UNO
- Buzzer
- 4 pulsadores
- 2 Leds ( Rojo y Azul)
- Display de 7 segmentos
- 4 resistenca de 1kOhm y 2 de 220 Ohm
- Cableado


Básicamente se trata de un juego. El  Arduino reproducirá una melodia, seguidamente debemos elejir uno de los 4 pulsadores. Si elegimos correctamente se encenderá un led azul en señal de victoria. En cambio, al elegir erróneamente se encenderá el led rojo (sonando el sonido de fail!) y se incrementará en uno el contador (display de 7 segmentos). El pulsador correcto se selecciona de forma aleatoria.



He programado 3 melodías, el principio de la marcha imperial, el tetris y Lost Woods (Zelda) que se van alternando.

El jugador deberá elegir sabiamente el pulsador y tener mucha paciencia si no quiere terminar con un buen dolor de cabeza!



Aunque las melodías parezcan una locura, una vez pillado el truco y con algún conocimiento musical son relativamente rápidas de programar. Adjunto información a continuación para sacar las frecuencias de cada nota y el número que le he asignado en el programa. 


El sketch es el siguiente:
int speakerPin1 = 12;
int numTones = 25;
int tones[] = {261.6,277.2,293.6,311.1,329.6,349.2,370,392,415.3,440,466.2,493.8,523.3,554.4,587.3,622.3,659.3,698.5,740,784,830.6,880,246.9,233.1,220};
int LED2 = 13;
int LED1 = 11;
int a = 2;
int b = 3;
int c = 6;
int d = 5;
int e = 4;
int f = 1;
int g = 0;
int i=0;
int correcte =0;
int pulsador=0;


int pulsador1 = 7;
int pulsador2 = 8;
int pulsador3 = 9;
int pulsador4 = 10;
int pulsadorc=0;


void setup()
{
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);

pinMode (pulsador1,INPUT);
pinMode (pulsador2,INPUT);
pinMode (pulsador3,INPUT);
pinMode (pulsador4,INPUT);

 pinMode (LED1, OUTPUT);
 pinMode (LED2, OUTPUT);
}

void escribirEnElDisplay(int va, int vb, int vc, int vd, int ve, int vf, int vg){
 
digitalWrite(a,va);
digitalWrite(b,vb);
digitalWrite(c,vc);
digitalWrite(d,vd);
digitalWrite(e,ve);
digitalWrite(f,vf);
digitalWrite(g,vg);
 
}

void loop ()
{
  
   pulsadorc= random(1,5);
   
   pulsador = 0;
do{
  if (digitalRead(pulsador1) == HIGH){ pulsador = 1;} 
  else if (digitalRead(pulsador2) == HIGH){ pulsador = 2;} 
  else if (digitalRead(pulsador3) == HIGH){ pulsador = 3;} 
  else if (digitalRead(pulsador4) == HIGH){ pulsador = 4;} 
 }while(pulsador == 0); 
 if(pulsador == pulsadorc && i !=0){
   digitalWrite (LED1, HIGH);
   tone(speakerPin1, tones[20]);
   delay(100);
   tone(speakerPin1, tones[3]);
   delay(200);
   tone(speakerPin1, tones[20]);
   delay(100);
   tone(speakerPin1, tones[3]);
   delay(200);
   noTone(speakerPin1);
   delay(10000);
   digitalWrite (LED1, LOW);
   i=0;
 }
 if(pulsador != pulsadorc && i !=0){
   digitalWrite (LED2, HIGH);
   tone(speakerPin1, tones[2]);
   delay(1000);
   digitalWrite (LED2, LOW);
   noTone(speakerPin1);
 }
   
   i++;
  switch (i) {
    case 1 :  escribirEnElDisplay(0,1,1,0,0,0,0);
   delay(3000);
   break;
    case 2 :  escribirEnElDisplay(1,1,0,1,1,0,1);
   delay(3000);
   break;
    case 3 :  escribirEnElDisplay(1,1,1,1,0,0,1);
   delay(3000);
   break; 
    case 4 :  escribirEnElDisplay(0,1,1,0,0,1,1); 
   delay(3000);
   break; 
    case 5 :  escribirEnElDisplay(1,0,1,1,0,1,1);
   delay(3000);
   break; 
    case 6 :  escribirEnElDisplay(1,0,1,1,1,1,1);
   delay(3000);
   break; 
    case 7 :  escribirEnElDisplay(1,1,1,0,0,0,0);
   delay(3000);
   break; 
    case 8 :  escribirEnElDisplay(1,1,1,1,1,1,1);
   delay(3000);
   break; 
    case 9 :  escribirEnElDisplay(1,1,1,1,0,1,1);
   delay(3000);
   break; 
   case 10 : i=0;
   break;
  }
  
  if (i==1) { //marxa imperial
    tone(speakerPin1, tones[10]);
    delay(400);
    noTone(speakerPin1);
    delay(50);
    tone(speakerPin1, tones[10]);
    delay(400);
    noTone(speakerPin1);
    delay(50);
    tone(speakerPin1, tones[10]);
    delay(400);
    noTone(speakerPin1);
    delay(50);
    tone(speakerPin1, tones[6]);
    delay(300);
    noTone(speakerPin1);
    delay(30);
    tone(speakerPin1, tones[13]);
    delay(100);
    noTone(speakerPin1);
    delay(30);
    tone(speakerPin1, tones[10]);
    delay(400);
    noTone(speakerPin1);
    delay(30);
    tone(speakerPin1, tones[6]);
    delay(300);
    noTone(speakerPin1);
    delay(30);
    tone(speakerPin1, tones[13]);
    delay(100);
    noTone(speakerPin1);
    delay(30);
    tone(speakerPin1, tones[10]);
    delay(800);
    noTone(speakerPin1);
    delay(30);
    
    tone(speakerPin1, tones[17]);
    delay(400);
    noTone(speakerPin1);
    delay(50);
    tone(speakerPin1, tones[17]);
    delay(400);
    noTone(speakerPin1);
    delay(50);
    tone(speakerPin1, tones[17]);
    delay(400);
    noTone(speakerPin1);
    delay(50);
    tone(speakerPin1, tones[18]);
    delay(300);
    noTone(speakerPin1);
    delay(30);
    tone(speakerPin1, tones[13]);
    delay(100);
    noTone(speakerPin1);
    delay(30);
    tone(speakerPin1, tones[9]);
    delay(400);
    noTone(speakerPin1);
    delay(30);
    tone(speakerPin1, tones[6]);
    delay(300);
    noTone(speakerPin1);
    delay(30);
    tone(speakerPin1, tones[13]);
    delay(100);
    noTone(speakerPin1);
    delay(30);
    tone(speakerPin1, tones[10]);
    delay(800);
    noTone(speakerPin1);
    
  }
    
  if(i == 3 || i == 5 || i == 7 || i == 9){
    //Lost Woods
    tone(speakerPin1, tones[6]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[10]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[12]);
    delay(400);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[6]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[10]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[12]);
    delay(400);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[6]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[10]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[12]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[17]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[15]);
    delay(400);
   noTone(speakerPin1);
    delay(20); //Re negra
   
    tone(speakerPin1, tones[12]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[13]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[12]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[8]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[5]);
    delay(1000);
   noTone(speakerPin1);
    delay(20); //Mi
    
    tone(speakerPin1, tones[4]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[5]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[8]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[5]);
    delay(1200);
    noTone(speakerPin1);
    delay(20);
    
    //Repeticio
    
  tone(speakerPin1, tones[6]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[10]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[12]);
    delay(400);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[6]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[10]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[12]);
    delay(400);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[6]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[10]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[12]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[17]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[15]);
    delay(400); //Re negra
    noTone(speakerPin1);
    delay(20);
    
    tone(speakerPin1, tones[12]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[13]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[17]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[12]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[8]);
    delay(1000);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[12]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[8]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[3]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[5]);
    delay(1200);
    noTone(speakerPin1);
    delay(20);
    
    //2n pentagrama 2n compas
    
    tone(speakerPin1, tones[3]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[5]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[6]);
    delay(400);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[8]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[10]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[12]);
    delay(400);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[13]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[12]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[5]);
    delay(1200);
   noTone(speakerPin1);
    delay(20); //Mi blanca puntet
    
    tone(speakerPin1, tones[3]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[5]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[6]);
    delay(400);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[8]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[10]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[12]);
    delay(400);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[13]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[15]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[17]);
    delay(1200); 
    noTone(speakerPin1);
    delay(20);//Mi agut blanca puntet
    
    
    tone(speakerPin1, tones[3]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[5]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[6]);
    delay(400);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[8]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[10]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[12]);
    delay(400);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[13]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[12]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[5]);
    delay(1200); 
    noTone(speakerPin1);
    delay(20);//Mi blanca puntet
    
    //compas11
    tone(speakerPin1, tones[5]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[3]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[6]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[5]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[8]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[6]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[10]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[8]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    //compas 12
    tone(speakerPin1, tones[12]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[10]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[13]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[12]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[15]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[13]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[17]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[15]);
    delay(200);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[12]);
    delay(100);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[13]);
    delay(300);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[10]);
    delay(100);
    noTone(speakerPin1);
    delay(20);
    tone(speakerPin1, tones[12]);
    delay(1100);
    
   
  noTone(speakerPin1);
  }
  if( i==2 || i==4 || i== 6|| i== 8){   //tetris
     tone(speakerPin1, tones[10]);
    delay(400);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[5]);
    delay(200);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[6]);
    delay(200);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[8]);
    delay(400);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[6]);
    delay(200);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[5]);
    delay(200);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[3]);
    delay(400);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[3]);
    delay(200);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[6]);
    delay(200);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[10]);
    delay(400);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[8]);
    delay(200);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[6]);
    delay(200);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[5]);
    delay(400);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[5]);
    delay(200);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[6]);
    delay(200);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[8]);
    delay(400);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[10]);
    delay(400);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[6]);
    delay(400);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[3]);
    delay(400);
    noTone(speakerPin1);
    delay(30);
    tone(speakerPin1, tones[3]);
    delay(800);
    noTone(speakerPin1);
    delay(30);
    noTone(speakerPin1);
    delay(200);
    tone(speakerPin1, tones[8]);
    delay(400);
    noTone(speakerPin1);
    delay(30);
    tone(speakerPin1, tones[11]);
    delay(200);
    noTone(speakerPin1);
    delay(30);
    tone(speakerPin1, tones[15]);
    delay(200);
     tone(speakerPin1, tones[15]);
    delay(200);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[13]);
    delay(200);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[11]);
    delay(200);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[10]);
    delay(600);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[6]);
    delay(200);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[10]);
    delay(200);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[10]);
    delay(200);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[8]);
    delay(200);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[6]);
    delay(200);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[5]);
    delay(400);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[5]);
    delay(200);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[6]);
    delay(200);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[8]);
    delay(400);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[10]);
    delay(400);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[6]);
    delay(400);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[3]);
    delay(400);
    noTone(speakerPin1);
    delay(30);
     tone(speakerPin1, tones[3]);
    delay(800);
     noTone(speakerPin1);
  }
  
 
 }

Y para que se vea más fácilmente el funcionamiento un vídeo también. 





Roger Marco Magraner
Estudiante en Grado en Tecnologías Industriales en la UPV
@RMagraner