Site icon AranaCorp

Utilisation des interruptions avec Arduino

Les interruptions permettent au microcontrôleur d’exécuter une fonction lorsqu’un évènement survient sur une des broches d’interruption. Plutôt que de lire constamment la valeur d’un capteur, le programme ne va se déclencher que lorsque la valeur du capteur va changer. Cela permet de résoudre bon nombre de problème d’agencement de tâche.

Matériel

Schéma

Sur la carte Arduino UNO, il y a deux broches qui supportent les interruptions: les broches 2 et 3. Nous allons donc relier la sortie du bouton à la broche 2 de l’Arduino.

Rappel des broches digitales compatibles avec les interruptions

Uno, Nano, Mini, other 328-based2, 3
Uno WiFi Rev.2, Nano Everyall digital pins
Mega, Mega2560, MegaADK2, 3, 18, 19, 20, 21
Micro, Leonardo, other 32u4-based0, 1, 2, 3, 7
Zeroall digital pins, except 4
MKR Family boards0, 1, 4, 5, 6, 7, 8, 9, A1, A2
Nano 33 IoT2, 3, 9, 10, 11, 13, 15, A5, A7
Nano 33 BLE, Nano 33 BLE Senseall pins
Dueall digital pins
101all digital pins (Only pins 2, 5, 7, 8, 10, 11, 12, 13 work with CHANGE)

Code de gestion des interruptions

La syntaxe pour initialiser une interruption est la suivante:

attachInterrupt(digitalPinToInterrupt(pin), ISR, mode)

Avec pin, la broche utilisée, ISR, la fonction à activer lorsque l’évènement est détecté et mode, le mode de détection utilisé.

const byte ledPin = 13;
const byte interruptPin = 2;
volatile byte state = LOW;

void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
  pinMode(interruptPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(interruptPin), onEvent, CHANGE);
  Serial.println(F("Système intialisé"));
}

void loop() {
  digitalWrite(ledPin, state);
}

void onEvent() {
  state = !state;
  Serial.print(F("Switch LED 13 : "));
  if(state){
    Serial.println(F("ON"));
  }else{
    Serial.println(F("OFF"));
  }
}

Attention: Dans la fonction onEvent(), les fonctions millis() et delay(), qui dépendent des interruptions, ne fonctionneront pas.

Les fonctions à connaitre pour aller plus loin dans la gestion des interruptions

Résultat

Une fois le code téléversé, si vous appuyez sur le bouton, la LED embarquée sur l’Arduino devrait s’allumer et s’éteindre.

Sources

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie

Quitter la version mobile