Horolf, he has probably set a flag in the ISR function (SW_Interrupt in this case), and the main loop reacts when this flag is set high, and the loop then sets it low again so the ISR can raise it again.
Emielkosse, I haven't run that code, but I believe the problem you are having is because you can't use delay() when interrupts are disabled - as it relies on interrupts to function! If you want to have a delay in an interrupt function, use delayMicroseconds() instead - just note it is microseconds, not milliseconds (i.e. 1000 micro in 1 milli). Also, don't just jump in and swap out delays() for delayMicroseconds(), as it disables interrupts, so your ISR function won't trigger and set it's flag whilst a delayMicroseconds delay is happening. You should really use the interrupt function how it seems you are using it now... to set a flag, so control can pass back immediately to your main loop, and the main loop can respond to the interrupt via the flag.