Menu
CoddyTech

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 von HIGH zu LOW (mit einem Pull-up, ein Tastendruck)
  • RISING: Der Pin wechselt von LOW zu HIGH (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);
challenge icon

Aufgabe

Einfach

Der 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: LOW schaltet die LED ein, HIGH schaltet sie aus
  • Verknüpfe onChange() mit dem Button-Pin und CHANGE

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);
}
quiz iconTeste dich selbst

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

Übe selbstständig: Arduino-Playground