top of page

En informatique, une interruption est un évènement externe au microcontrôleur qui provoque l’arrêt du programme en cours et déclenche un autre programme dit d’interruption. Lorsque ce programme d’interruption a été exécuté, le microcontrôleur reprend le programme principal là où il était avant l’interruption. En général, nous utilisons une interruption lorsque l’évènement extérieur est aléatoire, bref et surtout prioritaire.

Prenons l’exemple d’une alarme. Un voleur s’introduit dans une maison et active un capteur d’intrusion pendant un laps de temps très court. Si le programme gérant cette alarme n’utilise pas les interruptions, l’effraction peut ne pas être détectée car le microcontrôleur exécute les instructions du programme les unes à la suite des autres. En effet, l’activation du capteur étant très brève, le microcontrôleur peut faire autre chose que la surveillance de ses entrées numériques.

Par contre, avec un programme utilisant les interruptions, dès que le capteur est actif, le microcontrôleur stoppe ce qu’il faisait et traite cette interruption.

Les microcontrôleurs disposent d’une ou plusieurs entrées d’interruption. Sur la carte Arduino Uno, les entrées d’interruption sont les broches numériques N°2 et N°3. L’évènement extérieur provoquant l’interruption peut être un changement d’état, un état bas, un front montant ou un front descendant.

LES INTERRUPTIONS

L’instruction permettant de déclarer une interruption sous Arduino est de la forme

attachInterrupt (interruption, fonction, mode) où interruption représente le numéro de l’interruption de type int (avec une carte Arduino Uno interruption peut prendre deux valeurs : 2 ou 3), fonction le nom de la fonction à appeler et mode la façon dont l'interruption externe doit être prise en compte. Quatre constantes ont des valeurs prédéfinies valables :

               - LOW : pour déclenchement de l'interruption lorsque la broche est au niveau bas 

                 - CHANGE : pour déclenchement de l'interruption lorsque la broche change d'état

                 - RISING : pour déclenchement de l'interruption lorsque la broche reçoit un front montant

                 - FALLING : pour déclenchement de l'interruption lorsque la broche reçoit un front descendant

Nous pouvons interdire une interruption à l’aide de l’instruction detachInterrupt(interruption).

 

Remarque :

  • A l'intérieur de la fonction attachée à l'interruption, la fonction delay ne fonctionne pas et la valeur renvoyée par millis ne s'incrémente pas. Les données séries reçues pendant l'exécution de la fonction sont perdues.

  • Nous devons déclarer en tant que volatile toute les variables que vous modifiez à l'intérieur de la fonction attachée à l'interruption.  Pour cela, il suffit de rajouter le terme volatile devant la déclaration de chaque variable.

Exemple :

A chaque appui sur un bouton poussoir branché sur la broche numérique N°2 (interruption 0), une led branchée sur la broche numérique N°13 change d'état.

#define led 13                                                                   // led branchée sur la broche N°13                
volatile int etat = LOW;                                                     // déclaration d'une variable volatile
 
void setup()
{
 pinMode(led, OUTPUT);                                                  // la broche N°13 est configurée en sortie        
 attachInterrupt(0, blink, CHANGE);                               // attache l'interruption externe n°0 à la fonction blink
}
 
void loop()
{
 digitalWrite(led, etat);                                                     // led prend la valeur de la variable etat
}
 
void blink()                                                                        // la fonction appelée par l'interruption externe n°0
{
 etat = !etat;                                                                      // inverse l'état de la variable
}

bottom of page