Suche…


Syntax

  • digitalPinToInterrupt (Pin); // konvertiert eine PIN-ID in eine Interrupt-ID für die Verwendung von attachInterrupt() und detachInterrupt() .

  • attachInterrupt (digitalPinToInterrupt (Pin), ISR, Modus); // empfohlen

  • attachInterrupt (Interrupt, ISR, Modus); // nicht empfohlen

  • detachInterrupt (digitalPinToInterrupt (pin));

  • detachInterrupt (Interrupt);

  • noInterrupts (); // Deaktiviert Interrupts

  • unterbricht (); // Interrupts wieder aktivieren, nachdem noInterrupts() aufgerufen wurde.

Parameter

Parameter Anmerkungen
unterbrechen ID des Interrupts Nicht mit PIN-Nummer zu verwechseln.
ISR Service-Routine unterbrechen. Dies ist die Methode, die ausgeführt wird, wenn der Interrupt auftritt.
Modus Was soll den Interrupt auslösen? LOW, CHANGE, RISING oder FALLING. Due Boards erlauben auch HIGH.

Bemerkungen

Interrupt Service Routines (ISRs) sollten so kurz wie möglich sein, da sie die Hauptprogrammausführung unterbrechen und zeitabhängigen Code dazu bringen können. Im Allgemeinen bedeutet dies, dass Sie in der ISR ein Flag setzen und beenden, und in der Hauptprogrammschleife überprüfen Sie das Flag und tun, was immer dieses Flag tun soll.

Sie können delay() oder millis() in einer ISR verwenden, da diese Methoden selbst auf Interrupts angewiesen sind.

Ein Tastendruck unterbrechen

In diesem Beispiel wird ein Druckknopf (Taktschalter) verwendet, der an Digital-Pin 2 und GND angeschlossen ist, wobei ein interner Pull-Up-Widerstand verwendet wird, sodass Pin 2 auf HIGH steht, wenn die Taste nicht gedrückt wird.

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.
}

Ein einfaches Problem bei diesem einfachen Beispiel ist, dass Druckknöpfe zum Abprallen neigen, was bedeutet, dass sich der Stromkreis beim Drücken oder Loslassen mehr als einmal öffnet und schließt, bevor er sich in den endgültigen geschlossenen oder offenen Zustand einstellt. Dieses Beispiel berücksichtigt dies nicht. Wenn Sie die Taste drücken, wird die LED manchmal mehrmals umgeschaltet als erwartet.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow