Aquí tienes tu código modificado para usar la interrupción. No lo he probado, ni tan siquiera lo he compilado.
Recuerda que no va a funcionar "fluido" y que una vez pulsado el botón se ha de esperar a que termine el ciclo del efecto "actual" (los nueve segundos).
/*Pines:
Azul Inferior 7
Amarillo Inferior 5(PWM)
Ojos 12
Azul Superior 4
Amarillo Superior 3 (PWM)
Boton 2
*/
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
volatile boolean seHaPulsadoElBoton = false; // Si es verdadero es que se ha pulsado el botón
//Variables Luces
int ojos=12, AmaSup=3, UVSup=4, AmaInf=5, UVInf=7, boton=0;//Todo son salidas del arduino que encienden leds, excepto "boton" que es una entrada para el pulsador
//Variables auxiliares y otras de los case
int aux1,ama;//Case 1
int aux2;//Case 2
void setup()
{
//Configuracion pines
pinMode(ojos,OUTPUT);
pinMode(AmaSup,OUTPUT);
pinMode(UVSup,OUTPUT);
pinMode(AmaInf,OUTPUT);
pinMode(UVInf,OUTPUT);
pinMode(2,INPUT);
//Interrupcion para el boton
attachInterrupt(digitalPinToInterrupt(2), pulsador, RISING);
//¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡No tocar lo que viene a continuacion, es del DFPlayer(Reproductor de música) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
mySoftwareSerial.begin(9600);
Serial.begin(115200);
if (!myDFPlayer.begin(mySoftwareSerial)) { //Use softwareSerial to communicate with mp3.
}
myDFPlayer.volume(20); //Configuracion del volumen, valores de 0 a 30!!!!!!!!!!!!!!!!
}
void loop()
{
if (seHaPulsadoElBoton) {
// Si se ha pulsado el botón pasamos al siguiente valor de la variable
boton = (boton + 1) % 3; // El "% 3" es para hacer que al valor de boton sea entre 0 y 2 (cuando se implente el "efecto 3" se ha de poner "% 4")
delay(40); // Ya puesto a usar delay() lo usamos para evitar el efecto rebote si justo nos pilla en esta parte del código
seHaPulsadoElBoton = false; // Una vez asegurado que han transcurrido el "tiempo antirebote" borramos el flag que nos indica que se ha pulsado
}
switch(boton){//Acontinuacion los diferentes modos de funcionamiento
case 0://Todo apagado
digitalWrite(UVSup,LOW);
digitalWrite(UVInf,LOW);
digitalWrite(ojos,LOW);
analogWrite(AmaSup,0);
analogWrite(AmaInf,0);
break;
case 1://Solo luz amarilla
while(aux1==0)//Le pongo el while para que el primer "for" solo se ejecute una vez
{
for(ama=0;ama<=100;ama++)//Este solo para cuando se inicie por primera vez
{
delay(50);
analogWrite(AmaSup,ama);
analogWrite(AmaInf,ama);
}
aux1++;
}
for(ama=100;ama<=255;ama++)
{
delay(20);
analogWrite(AmaSup,ama);
analogWrite(AmaInf,ama);
}
delay(1000);//Tiempo de duracion con la luz máxima
for(ama=255;ama>=50;ama--)
{
delay(20);
analogWrite(AmaSup,ama);
analogWrite(AmaInf,ama);
}
for(ama=50;ama<=100;ama++)
{
delay(20);
analogWrite(AmaSup,ama);
analogWrite(AmaInf,ama);
}
break;
case 2://Luz amarilla y musica
while(aux2==0)////Le pongo el while para que el primer "for" solo se ejecute una vez
{
myDFPlayer.play(1); //Comando para que empiece a sonar la primera cancion
for(ama=0;ama<=100;ama++)//Este solo para cuando se inicie por primera vez
{
delay(50);
analogWrite(AmaSup,ama);
analogWrite(AmaInf,ama);
}
aux2++;
}
for(ama=100;ama<=255;ama++)
{
delay(20);
analogWrite(AmaSup,ama);
analogWrite(AmaInf,ama);
}
delay(1000);//Tiempo de duracion con la luz máxima
for(ama=255;ama>=50;ama--)
{
delay(20);
analogWrite(AmaSup,ama);
analogWrite(AmaInf,ama);
}
for(ama=50;ama<=100;ama++)
{
delay(20);
analogWrite(AmaSup,ama);
analogWrite(AmaInf,ama);
}
break;
case 3://Todos los efectos(todas las luces y la musica)
//Falta
break;
}
}
//Funcion para el pulsador
void pulsador()
{
seHaPulsadoElBoton = true; // Marcamos que se ha pulsado el botón
}
Fíjate que sólo he hecho tres cosas. Definir la variable seHaPulsadoElBoton:
volatile boolean seHaPulsadoElBoton = false; // Si es verdadero es que se ha pulsado el botón
Modificar la interrupción para que "marque" cuando se pulsa el botón:
//Funcion para el pulsador
void pulsador()
{
seHaPulsadoElBoton = true; // Marcamos que se ha pulsado el botón
}
Y añadir el lugar donde se actualiza la variable boton si se ha pulsado, justo antes de evaluar el switch(boton):
if (seHaPulsadoElBoton) {
// Si se ha pulsado el botón pasamos al siguiente valor de la variable
boton = (boton + 1) % 3; // El "% 3" es para hacer que al valor de boton sea entre 0 y 2 (cuando se implente el "efecto 3" se ha de poner "% 4")
delay(40); // Ya puesto a usar delay() lo usamos para evitar el efecto rebote si justo nos pilla en esta parte del código
seHaPulsadoElBoton = false; // Una vez asegurado que han transcurrido el "tiempo antirebote" borramos el flag que nos indica que se ha pulsado
}
Nota: el % 3 es para que la variable boton pase de valer 2 a valer 0. El valor 3 no lo permito porque no has implementado aún el efecto 3. Si implementas el efecto 3 no olvides cambiarlo por % 4.