FALLING, RISING und CHANGE
Teil des Abschnitts Timing ohne Delay der Arduino-Journey von Coddy. Lektion 13 von 18.
Der Uno hat zwei Pins, die einen Interrupt auslösen können: Pin 2 und Pin 3. Ein Taster, der einen Interrupt benötigt, muss mit einem dieser Pins verbunden werden. Im Chip sind es Interrupt 0 und Interrupt 1. Lass also digitalPinToInterrupt() den Pin in seine Nummer umwandeln. attachInterrupt(3, ...) fordert Interrupt 3 an, den der Uno nicht hat, und es passiert nichts.
Der letzte Teil von attachInterrupt() gibt an, auf welche Änderung reagiert werden soll:
FALLING: Der Pin wechselt vonHIGHzuLOW(mit einem Pull-up, ein Tastendruck)RISING: Der Pin wechselt vonLOWzuHIGH(das Loslassen)CHANGE: entweder das eine oder das andere
Bei CHANGE wird die ISR sowohl beim Drücken als auch beim Loslassen ausgeführt. Sie liest den Pin aus, um festzustellen, was passiert ist:
void onChange() {
if (digitalRead(buttonPin) == LOW) {
// Er wurde gedrückt
} else {
// Er wurde losgelassen
}
}
attachInterrupt(digitalPinToInterrupt(buttonPin), onChange, CHANGE);Aufgabe
EinfachDer Button ist an Pin 3, und loop() ist mit einer langsamen Aufgabe beschäftigt. Lass die LED an Pin 13 sofort dem Button folgen:
- Lies in
onChange()den Button aus:LOWschaltet die LED ein,HIGHschaltet sie aus - Verknüpfe
onChange()mit dem Button-Pin undCHANGE
Drücke auf Run, halte den Button gedrückt und lasse ihn los, dann drücke auf Check.
Probier es selbst
const int ledPin = 13;
const int buttonPin = 3;
// Wird jedes Mal ausgeführt, wenn sich der Zustand des Taster-Pins ändert.
void onChange() {
// Schalte die LED ein, wenn der Taster gedrückt ist, und aus, wenn er losgelassen wird.
}
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
// Verknüpfe onChange() hier mit dem Taster-Pin.
}
void loop() {
// Die langsame Aufgabe: unverändert lassen.
Serial.println("working");
delay(2000);
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Timing ohne Delay
3Interrupts
Ein Tastendruck, den die Schleife verpasstFALLING, RISING und CHANGEDaten teilen mit volatileTastendrücke per Interrupt zählenÜbe selbstständig: Arduino-Playground