Problema con interrupciones

Hola y buenas a todos!

Soy nuevo en el foro y vengo a pediros algo de ayuda en un problema que por ahora no encuentro solución.
Estoy llevando a cabo un contador de vueltas, o laptimer, que es disparado por la interrupción 0 del Arduino (estoy probando con el UNO). El caso es que quiero que haya un tiempo "oscuro" en el que el laptimer no cuente la vuelta (en el código de ejemplo si el tiempo es menor de 10 segundos, desactivo la interrupción y no dispara el contador).

El problema que encuentro es que si en el "tiempo oscuro" hay un flanco de bajada en el pin de la interrupción, lo que me hace es que me lo guarda, y justo en cuanto ha pasado el "tiempo oscuro", que en el ejemplo son 10 segundos, me dispara otra vez la interrupción, de manera que cuenta otra vuelta con el tiempo exacto del tiempo oscuro.

Os dejo el código a ver si vosotros veis que es lo que estoy haciendo mal:

volatile int minutos = 0;
volatile int segundos = 0;
volatile int decimas = 0;
long milisegundos = 0;
int boton = 2;
volatile int i = 0;
volatile int minutosvr= 59;
volatile int segundosvr = 59;
volatile int decimasvr=999;
unsigned int t_oscuro = 10000; //Tiempo de oscuridad de 10 segundos
unsigned long lastmillis = 0;
boolean interrupt_activ;

void setup(){
  Serial.begin(9600);
  pinMode(boton, INPUT);
  digitalWrite(boton, HIGH);
  
 
}


  //Restart button
  void reinicio(){
    
   i = i++;
    if(minutos<minutosvr || minutos==minutosvr && segundos<segundosvr || minutos==minutosvr && segundos==segundosvr && decimas<decimasvr){
     minutosvr= minutos;
     segundosvr = segundos;
     decimasvr= decimas;
    }
    
    minutos=0;
    segundos=0;
    decimas=0; 
    lastmillis = millis();    
  }
  



void loop(){
  
 
  if (millis()-lastmillis > t_oscuro){   //Si ya ha pasado el tiempo de oscuridad
    if (interrupt_activ == false){        //Volvemos a activar la interrupción
      attachInterrupt(0, reinicio, FALLING); 
      interrupt_activ = true;
    }else if (interrupt_activ == true){  //Si la interrupción está activada esperamos a que salte    
    }
    
    
  }else if (millis()-lastmillis <= t_oscuro){  //Si no ha pasado el tiempo de oscuridad
    if (interrupt_activ == true){                
       detachInterrupt(0);  //Desactivamos la interrupción
       interrupt_activ = false;
    }else if(interrupt_activ == false){}
  }
  
  
  milisegundos = millis();
  if(milisegundos % 100 == 0){ //Only enter if it has passed tenth of a second
    decimas++;
    if(decimas == 10){ //When it has passed 10 tenths of a second it count one second
      decimas = 0;
      segundos++;
    }
    if(segundos == 60){ //When it has passed 60 seconds it count one minute
      segundos = 0;
      minutos++;
    }
    
    //Imprimir por pantalla
    if(minutos < 10){
      Serial.print("0");
    }
    Serial.print(minutos);
    Serial.print(":");
    
    if(segundos < 10){
      Serial.print("0");
    }
    Serial.print(segundos);
    Serial.print(":");    
    Serial.print(decimas);
    Serial.print("            ");
    
    if(minutosvr < 10){
      Serial.print("0");
    }
    Serial.print(minutosvr);
    Serial.print(":");
    
    if(segundosvr < 10){                  //tiempo vuelta rápida
      Serial.print("0");                  //tiempo vuelta rápida
    }                                     //tiempo vuelta rápida
    Serial.print(segundosvr);             //tiempo vuelta rápida
    Serial.print(":");                    //tiempo vuelta rápida
    Serial.print(decimasvr);              //tiempo vuelta rápida
    Serial.print("             ");    //tiempo vuelta rápida
    Serial.print(i);                    //número de vueltas completadas
    Serial.print("           ");
    Serial.print(milisegundos);
    Serial.print("      ");
    Serial.println(interrupt_activ);
  }

  
}

Muchas gracias por la ayuda!

Creo que lo que ocurre es que aunque la interrupción esté desactivada, el flag que registra la bajada de flanco sí queda activado, de manera que en cuanto la activas, detecta dicho flag y llama a la interrupción.
Tendrás que mirar bien qué registros están implicados en la interrupción y qué debes hacer para desactivar dicho flag; o quizás también te funcione y sea más sencillo, en lugar de desactivar la interrupción, establecer en lugar de la función "reinicio" una función "dummie" que no haga nada (creo que lo que sí hace es bajar el flag). Una opción más sería englobar todo el código que tienes actualmente en la función reinicio en un if (millis()-lastmillis > t_oscuro), quitando del loop todo el código que hay hasta "milisegundos = millis();".
Tienes en tu código algunas cosas poco eficientes, aunque no quiero liarte si te basta con el código tal y como lo tienes. De momento sólo comentarte que eches un repaso a las sentencias de control if / else. Todos los else if que tienes creo que se podrían dejar, sencillamente como else.
Saludos.

Muchas gracias por la respuesta. Probé lo de usar la función "dummie" y funcionó perfectamente.
Respecto a los else if tienes, razón, se pueden sustituir todos por else, no se porque usé eso.
De todas formas si quieres y te ves con ganas estoy abierto a sugerencias para hacer el código mas eficiente