Recherche…


Syntaxe

  • digitalPinToInterrupt (broche); // convertit un identifiant de broche en identifiant d'interruption, à utiliser avec attachInterrupt() et detachInterrupt() .

  • attachInterrupt (digitalPinToInterrupt (pin), ISR, mode); // conseillé

  • attachInterrupt (interruption, ISR, mode); // non recommandé

  • detachInterrupt (digitalPinToInterrupt (pin));

  • detachInterrupt (interruption);

  • noInterrupts (); // désactive les interruptions

  • interruptions (); // réactiver les interruptions après l' noInterrupts() de noInterrupts() .

Paramètres

Paramètre Remarques
interrompre Identifiant de l'interruption. Ne pas être confondu avec le numéro d'identification.
ISR Routine de service d'interruption. C'est la méthode qui sera exécutée lorsque l'interruption se produira.
mode Qu'est-ce qui devrait déclencher l'interruption? Un de bas, changer, se lever ou tomber. Les commissions sont également autorisées.

Remarques

Les routines de service d'interruption (ISR) doivent être aussi courtes que possible, car elles mettent en pause l'exécution du programme principal et peuvent donc vider le code en fonction du temps. Généralement, cela signifie que dans l'ISR, vous définissez un drapeau et sortez, et dans la boucle du programme principal, vous vérifiez le drapeau et faites ce que ce drapeau est censé faire.

Vous ne pouvez pas utiliser delay() ou millis() dans un ISR car ces méthodes elles-mêmes reposent sur des interruptions.

Interruption sur le bouton presse

Cet exemple utilise un bouton-poussoir (commutateur tactile) connecté à la broche numérique 2 et à la masse, en utilisant une résistance de rappel interne pour que la broche 2 soit haute lorsque le bouton n'est pas enfoncé.

const int LED_PIN = 13;
const int INTERRUPT_PIN = 2;
volatile bool ledState = LOW;

void setup() {
    pinMode(LED_PIN, OUTPUT);
    pinMode(INTERRUPT_PIN, INPUT_PULLUP);
    attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN), myISR, FALLING); // trigger when button pressed, but not when released.
}

void loop() {
    digitalWrite(LED_PIN, ledState);
}

void myISR() {
    ledState = !ledState;
    // note: LOW == false == 0, HIGH == true == 1, so inverting the boolean is the same as switching between LOW and HIGH.
}

Un exemple avec cet exemple simple est que les boutons-poussoirs ont tendance à rebondir, ce qui signifie que le circuit s’ouvre et se ferme plus d’une fois avant de s’établir dans l’état final fermé ou ouvert. Cet exemple ne prend pas cela en compte. Par conséquent, il suffit parfois d'appuyer sur le bouton pour basculer le voyant plusieurs fois, au lieu d'une fois.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow