Skip to main content

Nous allons voir ensemble dans ce tutoriel l’utilisation d’interruption dans un programme arduino. Les interruptions vont nous permettre d’obtenir des systèmes beaucoup plus rapide et réactifs.

Une interruption c’est quoi ?

Une interruption est un déclenchement qui arrête l’exécution d’un programme ou d’un bout de code pour exécuter une autre fonction.
C’est typiquement le cas lorsque l’on programme un chronomètre. Le temps s’écoule jusqu’au moment où on décide de stopper le chronomètre afin de lire la valeur inscrite sur l’écran.
Une interruption permet ainsi de stopper ou d’effectuer un programme puis d’en reprendre l’exécution à partir de l’instant où il a été stoppé.
 tableau des interruptions
Pour déclencher une interruption, il existe plusieurs solutions :
  • LOW : Passage à état bas du pin
  • FALLING : Detection d’un front descendant (passage de l’état haut à l’état bas)
  • RISING : Detection d’un front montant (passage de l’état bas à l’état haut)
  • CHANGE : Changement d’état du pin

Création d’une interruption

 La fonction à utiliser est la suivante :
  • attachInterrupt(interrupt, function, mode)
    • interrupt : numéro du pin (0 pour le pin 2 et 1 pour le pin 3)
    • function : fonction à appeler
    • mode : type de déclenchement (LOW // FALLING // RISING // CHANGE)

Utilisation

Contexte : Nous voulons que notre chronomètre se stoppe lorsque l’on appui sur un bouton.
Nous allons appeler une fonction « Pause() » lorsque l’utilisateur appuie sur un bouton branché sur le pin 2.
Ainsi, nous aurons la syntaxe suivante :

attachInterrupt(0, Pause, FALLING);

Notez l’absence des parenthèse après l’appel de fonction « Pause ». Vous pouvez coder par exemple la fonction « Pause() » un peu plus loin dans le programme.

Lorsque vous utilisez une interruption, tout le programme se met en « pause » et la fonction appelée dans l’interruption prend le relais. Ainsi, les fonctions de temps « delay() », « millis() » seront également stoppée. Veillez à bien faire attention dans vos programmes pour ne pas avoir de mauvaise surprise !

Exemple

int pin = 13;
volatile int state = LOW; //déclaration d'une variable volatile

void Setup(){
     pinMode(pin, OUTPUT);
     attachInterrupt(0, blink, CHANGE); //attache l'interruption externe n°0 à la fonction "blink"
}

void Loop(){
     digitalWrite(pin, state); //la LED reflète d'état de la variable
}

void blink(){
     state = !state; //inverse l'état de la variable
}

Grégoire A.

Thomas Aubret

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.