{{tag>dev arduino interruption}}
====== Gestion des interruptions avec Arduino ======
Les interruption externes peuvent être câblées sur les broches 2 et 3 de l'ATmega 328. On utilisera la fonction **attachInterrupt()** pour configurer la gestion des interruptions externes.
#define PIN_2 0
#define PIN_3 1
void traitementSurInterruption();
void setup()
{
attachInterrupt(PIN_2, traitementSurInterruption, RAISING);
}
Le troisième argument est une constante, le mode de déclenchement de l'interruption qui prendra une des valeurs suivantes: LOW, CHANGE, RAISING, FALLING.
Le temps du traitement de l'interruption externe (lors de l’exécution du gestionnaire d'interruption), les interruptions internes ne sont pas prises en compte et les fonctions qui les utilises peuvent être perturbées notamment:
* delay() qui permet de suspendre l’exécution de code pendant un temps donné
* milli() qui compte le temps
* Serial() pour la communication via UART.
Le gestionnaire d’interruption doit être le plus court possible.
Toute variable modifiée par une fonction exécutée lors du traitement des interruptions doit avoir été déclarée **volatile**.
Si, dans un partie spécifique du programme on souhaite éviter que le traitement soit interrompu par des interruptions on peut faire appel à la fonction **noInterrupt()** puis réactiver les interruptions avec **interrupts()**. Lorsque noInterrupts() est appelée, les fonctions delay(), milli() Serial() utilisant les interruptions internes ne fonctionneront pas jusqu’à ce que la fonction interrupts() soit appellée.