Funcion de interrupcion se repite 2 veces, por que?

Buenas, estoy probando las interrupciones y me surgio el siguente problema, despues de disparar la interrupcion mediante un boton, la funcion showMaxReading() se ejecuta dos veces. Las interrupciones se ponen en cola? es como si por rebote del switch se pusiera en cola una segunda ejecucion de la funcion a la espera que termine la primera.

Alguien podria explicarme? gracias

pinMode(2, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(2),showMaxReading,FALLING);

void showMaxReading(){
  plotAnalogTo3Digit(maxReading);
  for(int i = 0; i < 300; i++){
    delayMicroseconds(30000);
  }    
  testing = testing + 1;
}

En principio se supone que la rutina de interrupción tiene que ser lo más corta y sencilla posible y evitar el llamado a funciones externas.
Obviamente tu rutina, que dura más de 9 segundos está encolando interrupciones por rebote.
Probá poner

detachInterrupt(digitalPinToInterrupt(2));

como primer instrucción de la rutina para deshabilitar el servicio.
Por supuesto vas a tener que volver a declararla para usarla nuevamente.

Edito: ¿Cuál es el sentido de tener al procesador durante 9 segundos haciendo nada en la rutina de interrupción?

Saludos

Y yo insisto en lo que @gatul te observa

Algo como

  for(int i = 0; i < 300; i++){
    delayMicroseconds(30000);
  }

sinceramente estas MUY MUY ERRADO y mira como lo escribo para no decirte algo que te ofenda, porque has metido la pata muy muy profundo.

30000 useg = 30 mseg y ademas 300 veces
O sea a algo que debe ser super rápido (una rutina de interrupción) le pides que demore 9000 mseg o sea 9 segundos y todavía preguntas porque responde dos veces?

Tu a ver que opinas?

Una interrupción debe ser veloz, imagina que ni siquiera puedes imprimir algo porque son unos milisegundos.
Y tu te tomas 9 segundos de rutina de interrupción.

Además un botón o pulsador, no requiere de ninguna interrupción para saber si es o no presionado aun cuando tenga rebote.
Se que no lo sabías y que estarás aprendiendo, pero internet esta lleno de tutoriales sobre interrupciones y todo lo que encuentres con interrupciones y botones para mi viene de un mal programador y lo digo con todo el énfasis. Y cuando lo digo no hablo de tu persona, sino de quien escribió el tutorial. Pero claro, escribir tutoriales es fácil, el problema es que todos crean que porque esta publicado esta bien. No es el caso.

Existe varios tutoriales en Documentación y Tutoriales de este foro.

También puedes usar una librería para leer botones sin rebotes que tiene todo resuelto y no usa interrupciones porque NO HACE FALTA y se llama Bounce2.h

Esa librería usa millis() y de hecho solo con millis() y algo de código resuelves el problema, por eso es que no se requieren interrupciones y menos del modo en que lo has usado.
No hay rebotes que superen si mal recuerdo 50 mseg.
Hay muy buenos tutoriales en Documentación con Oscilogramas y todo.