Switched from loop to interrupt for the button press check.
Was getting some double fires, so to solve it I remove the interrupt
while the callback function is running and add it back at when it is
done. Seems to work, and no more 100% cpu usage while sitting idle.