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