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 ?
- 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
- 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 :
1 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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.