Motorrad Alarmanlage

kann ich hier kein delay setzen?

Nein, wakeUpNow() ist ein InterruptHandler und sollte nur kurz laufen.

Wo die Funktion in deiner Datei steht, ist übrigens egal

sleepNow() wird in deinem Beispiel noch gar nicht aufgerufen. Wenn aber doch ( z.B. wenn du in loop() merkst, dass es "Zeit zum Schlafengehen" ist ) läuft sleepNow() als Funktion von loop() und mit sleep_mode(); ist erstmal Pause!

Der Interrupt Pin2 = LOW startet die Routine wakeUpNow mit hoher Priorität ( InterruptRoutine ). Wenn diese ( möglichst bald ) fertig ist, geht die normale Programmausführung weiter, und zwar direkt nach [b]sleep_mode(); [/b] mit

   // THE PROGRAM CONTINUES FROM HERE AFTER WAKING UP
    sleep_disable();        
    detachInterrupt(0);      
}

von da zurück zu Aufrufer ( loop() ? ) und alles ist wieder normal...

Wozu ist das #include <avr/sleep.h> ? läd er hier einen Queelcode (sleep.h) zusätzlich in mein Board?

.h Dateien enthalten (fast) keinen Programmcode, aber Funktionsdeklarationen, damit der Compiler z.B. weiss dass es eine Funktion namens sleep_disable() gibt, und welche Aufruf- und Rückgabewert-Typen diese erwartet. Die Funktionen, die aktuell gebraucht werden, werden dann auch mit in dein Board geladen. Deren Code ist in der Regel in eigenen .cpp Dateien. Beide können in Libraries... angeschaut werden.