Arduino Tutorial #3 – Taster mit einem Interrupt einlesen

Arduino Kurs Teil 3
Hier wird der Taster per Interrupt eingelesen und die Interrupt Service Routine wird ausgeführt. Das Hauptprogramm muss also nicht ständig den Taster auslesen, sondern kann einfach durchlaufen. Der Tastendruck ruft sozusagen seine eigene Funktion auf.

Das Programm

// Ein Taster Interrupt schaltet die LED 13 ein und aus
// Beim Arduino Uno / Nano sind das Pin 2 oder Pin 3 für den Interrupt

int LED=13, taster=2, an=0;

void setup() {
  pinMode(taster,INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(taster), isrLedUmschalten, LOW);
}

void loop() {
  delay(1000);
}

void isrLedUmschalten() { 
  an=!an;
  digitalWrite(LED,an);
  while(!digitalRead(taster));
}

Das Programm mit der fallenden Flanke (FALLING)

// Ein Taster Interrupt schaltet die LED 13 ein und aus
// Beim Arduino Uno / Nano sind das Pin 2 oder Pin 3 für den Interrupt

int LED=13, taster=2, an=0;

void setup() {
  pinMode(taster,INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(taster), isrLedUmschalten, FALLING);
}

void loop() {
  delay(1000);
}

void isrLedUmschalten() { 
  an=!an;
  digitalWrite(LED,an);
}

Das Programm mit einem „Delay“ falls der Taster prellen sollte

// Ein Taster Interrupt schaltet die LED 13 ein und aus
// Beim Arduino Uno / Nano sind das Pin 2 oder Pin 3 für den Interrupt

int LED=13, taster=2, an=0;

void setup() {
  pinMode(taster,INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(taster), isrLedUmschalten, FALLING);
}

void loop() {
  delay(1000);
}

void isrLedUmschalten() { 
  an=!an;
  digitalWrite(LED,an);
  for(int i=0; i<40; i++) { // delay 40x500uSek=20mSek
    delayMicroseconds(500);
  }
}

von Matthias Busse

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.