arduino
Unterbricht
Suche…
Syntax
digitalPinToInterrupt (Pin); // konvertiert eine PIN-ID in eine Interrupt-ID für die Verwendung von
attachInterrupt()
unddetachInterrupt()
.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.