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
Danke für das Tutorial. Ich probiere das mal bei meinem Problem mit meiner Ampel aus!
Vielen Dank funktioniert alles bestens, nur eins verstehe ich nicht. Der Sketch funktioniert so nur mit Pin 13, die anderen Pins muss ich zuerst im void setup als pinMode OUTPUT definieren.