Arduino Tutorial #4 – Zwei Taster per Interrupt einlesen

Arduino Kurs Teil 4
Zwei Taster können zwei Interrupts auslösen.
Der eine Taster-Interrupt schaltet die LED ein und der andere Taster-Interrupt schaltet die LED aus.

Das Programm

// Zwei externe Taster schalten die LED 13 ein und aus per Interrupt
// Beim Arduino Uno / Nano sind das Pin2 oder Pin3 für den Interrupt

int LED=13, taster1=2, taster2=3;

void setup() {
  pinMode(taster1,INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(taster1), isrLedEinschalten, FALLING);
  pinMode(taster2,INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(taster2), isrLedAusschalten, FALLING);
}

void loop() {
  delay(1000);
}

void isrLedEinschalten() {
  digitalWrite(LED,1);
}

void isrLedAusschalten() {
  digitalWrite(LED,0);
}

von Matthias Busse

Ein Gedanke zu „Arduino Tutorial #4 – Zwei Taster per Interrupt einlesen

  1. Peter Lenz

    Hallo Herr Busse,
    die Erklärungen sind toll. Habe schon mehrere Sachen ausprobiert. Habe bezüglich des Tastereinlesens eine spezielle Frage:
    Kann ich mit dieser Abfrage wie oben dargestellt mehrere Funktionen („Unterprogramme“) aufrufen, anstatt eine LED zu steuern? Die Funktionen sehen wie folgt aus (Es handelt sich dabei um die Auswahl mehrerer Musikordner auf einer SD-Karte (DFPlayer Mini):
    Innerhalb dieser Ordner kann ich mit 30 Tastern Musikstücke auswählen, das funktioniert bereits recht gut.
    _______________________________________________________________________________________________________________
    void Ordner01(){
    for (int i=0; i<30; i++){ // wiederhole 30 Mal (für jeden Taster)
    if (digitalRead(buttonPins[i]) == LOW){ // wenn ein Taster gedrückt wird
    Serial.println(i);
    myDFPlayer.playLargeFolder(1,i+1); // spiele das MP3 der Nummer des Tasters nach von der SD-Karte
    delay(2000);
    }
    }
    }

    void Ordner02(){
    for (int i=0; i<30; i++){ // wiederhole 30 Mal (für jeden Taster)
    if (digitalRead(buttonPins[i]) == LOW){ // wenn ein Taster gedrückt wird
    Serial.println(i);
    myDFPlayer.playLargeFolder(2,i+1); // spiele das MP3 der Nummer des Tasters nach von der SD-Karte
    delay(2000);
    }
    }
    }
    _______________________________________________________________________________________________________________
    Meine bishere Lösung hat den Nachteil, dass egal welcher Taster gedrückt wurde, der Status nach dem Tastendruck nicht behalten wurde und somit (durch den Loop) die Ordner je nach Ablauf angesprochen wurden. Hier mein laienhaftes Vorgehen:
    ______________________________________________________________________________________________________________
    void loop()
    {
    if (digitalRead(2) == LOW){
    Serial.println(2);
    {
    Ordner01();
    delay(200);
    }
    }
    if(digitalRead(4) == LOW){
    Serial.println(4);
    {
    Ordner02();
    delay(200);
    }
    }
    if(digitalRead(8) == LOW){
    Serial.println(8);
    {
    Ordner03();
    delay(200);

    }
    }
    }
    Vielleicht können sie mir ein Beispiel für das Ansteuern der Ordner01,02…. aufzeigen.
    Würde mich sehr über eine Antwort freuen. Vielen Dank im Voraus.

    Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

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