Strange behaviour using interrupts

Also I've never seen this mode of passing the mode value to the attachInterrupt function. It might not be properly be setting up the mode correctly.

static const int INTERRUPT_MODE = RISING;

Try setting the mode directly in the attach statement:

attachInterrupt(INTERRUPT_NUMBER, beep,  RISING);  // or the other defined mode names.

And finally:

void beep(){
  tone(7, 440, 1000);
}

Typically it's a bad practice to call a function while inside a ISR function unless you know exactlly what side effects that
might cause. As I said have the ISR set a flag, test the flag in your loop function, call the tone function if true and then reset the flag variable. Life will be more consistent that way. :wink: