Buenas tardes:
Me encuentro haciendo un prototipo que consiste en sonar la canción de "Martinillo" al pulsar un botón, esto junto a un led RGB que prende y apaga al compas de la música. El problemas que tengo es que en el momento de pulsar el botón en cualquier parte de la canción no para y tengo que esperar hasta que esta acabe. Quisiera ver si me pudieran ayudar con esto.
Gracias.
# define NOTE_G3 196
# define NOTE_G4 392
# define NOTE_D5 294
# define NOTE_C4 262
# define NOTE_C5 523
# define NOTE_E4 330
# define NOTE_F4 349
# define NOTE_A4 440
# define NOTE_B4 494
int contador = 0;
int estadoBoton = 0;
int estado2Boton = 0;
int residuo = 0;
int residuo3 = 0;
void setup()
{
pinMode(2, INPUT);
pinMode(3, OUTPUT);
pinMode(5, OUTPUT);
pinMode(7, OUTPUT);
Serial.begin(9600);
}
void loop()
{
estadoBoton = digitalRead(2);
while(estadoBoton == HIGH){
tone(8, NOTE_C4, 50);
digitalWrite(3, HIGH);
delay(200);
digitalWrite(3, LOW);
delay(250);
tone(8, NOTE_D5, 50);
digitalWrite(5, HIGH);
delay(200);
digitalWrite(5, LOW);
delay(250);
tone(8, NOTE_E4, 50);
digitalWrite(3, HIGH);
delay(200);
digitalWrite(3, LOW);
delay(350);
tone(8, NOTE_C4, 50);
digitalWrite(7, HIGH);
delay(200);
digitalWrite(7, LOW);
delay(250);
tone(8, NOTE_C4, 50);
digitalWrite(3, HIGH);
delay(200);
digitalWrite(3, LOW);
delay(200);
tone(8, NOTE_D5, 50);
digitalWrite(5, HIGH);
delay(200);
digitalWrite(5, LOW);
delay(200);
tone(8, NOTE_E4, 50);
digitalWrite(3, HIGH);
delay(200);
digitalWrite(3, LOW);
delay(200);
tone(8, NOTE_C4, 50);
digitalWrite(7, HIGH);
delay(200);
digitalWrite(7, LOW);
delay(250);
tone(8, NOTE_E4, 50);
digitalWrite(5, HIGH);
delay(200);
digitalWrite(5, LOW);
delay(250);
tone(8, NOTE_F4, 50);
digitalWrite(3, HIGH);
delay(200);
digitalWrite(3, LOW);
delay(250);
tone(8, NOTE_G4, 50);
digitalWrite(7, HIGH);
delay(300);
digitalWrite(7, LOW);
delay(400);
tone(8, NOTE_E4, 50);
digitalWrite(5, HIGH);
delay(200);
digitalWrite(5, LOW);
delay(200);
tone(8, NOTE_F4, 50);
digitalWrite(3, HIGH);
delay(200);
digitalWrite(3, LOW);
delay(200);
tone(8, NOTE_G4, 50);
digitalWrite(7, HIGH);
delay(300);
digitalWrite(7, LOW);
delay(400);
tone(8, NOTE_G4, 50);
digitalWrite(3, HIGH);
delay(150);
digitalWrite(3, LOW);
delay(100);
tone(8, NOTE_A4, 50);
digitalWrite(7, HIGH);
delay(150);
digitalWrite(7, LOW);
delay(100);
tone(8, NOTE_G4, 50);
digitalWrite(5, HIGH);
delay(150);
digitalWrite(5, LOW);
delay(100);
tone(8, NOTE_F4, 50);
digitalWrite(3, HIGH);
delay(150);
digitalWrite(3, LOW);
delay(100);
tone(8, NOTE_E4, 50);
digitalWrite(7, HIGH);
delay(350);
digitalWrite(7, LOW);
delay(250);
tone(8, NOTE_C4, 50);
digitalWrite(5, HIGH);
delay(350);
digitalWrite(5, LOW);
delay(250);
tone(8, NOTE_G4, 50);
digitalWrite(3, HIGH);
delay(150);
digitalWrite(3, LOW);
delay(100);
tone(8, NOTE_A4, 50);
digitalWrite(7, HIGH);
delay(150);
digitalWrite(7, LOW);
delay(100);
tone(8, NOTE_G4, 50);
digitalWrite(5, HIGH);
delay(150);
digitalWrite(5, LOW);
delay(100);
tone(8, NOTE_F4, 50);
digitalWrite(3, HIGH);
delay(150);
digitalWrite(3, LOW);
delay(100);
tone(8, NOTE_E4, 50);
digitalWrite(7, HIGH);
delay(350);
digitalWrite(7, LOW);
delay(250);
tone(8, NOTE_C4, 50);
digitalWrite(5, HIGH);
delay(350);
digitalWrite(5, LOW);
delay(250);
tone(8, NOTE_D5, 50);
digitalWrite(3, HIGH);
delay(250);
digitalWrite(3, LOW);
delay(350);
tone(8, NOTE_G3, 50);
digitalWrite(7, HIGH);
delay(250);
digitalWrite(7, LOW);
delay(350);
tone(8, NOTE_C4, 50);
digitalWrite(5, HIGH);
delay(250);
digitalWrite(5, LOW);
delay(550);
tone(8, NOTE_D5, 50);
digitalWrite(3, HIGH);
delay(250);
digitalWrite(3, LOW);
delay(350);
tone(8, NOTE_G3, 50);
digitalWrite(7, HIGH);
delay(250);
digitalWrite(7, LOW);
delay(350);
tone(8, NOTE_C4, 50);
digitalWrite(5, HIGH);
delay(250);
digitalWrite(5, LOW);
delay(550);
estado2Boton = digitalRead(2);
if(estado2Boton == HIGH){
break;
}
}
delay(5000);
}