Programming your input pin to trigger an interrupt should cause the processor to immediately stop what it's doing and process your input. That in itself can cause a problem, but you could do something very simple in your interrupt route such as just set a global boolean flag to true indicating that the button was pushed, then handle that flag later in your loop(). This would reduce the chance that the interrupt would disrupt something else. Maybe something like:
#define INTERRUPT_INPUT_PIN 2
volatile bool bGlobalButtonPressedFlag ;
setup()
{
pinMode(INTERRUPT_INPUT_PIN , INTPUT_PULLDOWN);
bGlobalButtonPressedFlag = false;
attachInterrupt(digitalPinToInterrupt(INTERRUPT_INPUT_PIN), ButtonPressedFunction, RISING /* Trigger when pin is pulled high */);
}
// The processor will stop everything and execute this function the instant the button is pushed
void ButtonPressedFunction()
{
bGlobalButtonPressedFlag = true;
}
loop()
{
// blah blah...
if( bGlobalButtonPressedFlag == true )
{
// Do stuff...
bGlobalButtonPressedFlag = false; // Reset
}
}