Es folgen zwei Programmbeispiele in der Arduino Umgebung mit Interrupts:


Wechselnde LEDs mit Taster

Hier leuchtet eine von zwei LEDs. Sie wechseln, wenn ein Taster betätigt wird.

Dazu werden die LEDs an den Pins 12 und 13 angeschlossen. An Pin 2 (Interrupt INT0) wird der Taster angeschlossen und mit +5V verbunden.

volatile bool switch_LED = true; //volatile, da switch_LED im Interrupt geändert wird

void setup()
{
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  digitalWrite(13, HIGH); //am Anfang des Programmes leuchtet eine LED
  attachInterrupt(0, Aus, RISING); //Interrupt deklarieren
}

void loop()
{
  //frei für mögliches Hauptprogramm, da die LEDs im Interrupt angesteuert werden
}

void Aus()
{
  if(switch_LED) //wenn die linke LED leuchtet, wird sie ausgeschaltet und die rechte leuchtet
  {
    switch_LED = false;
    
    digitalWrite(12, HIGH);
    digitalWrite(13, LOW);
  }
  else
  {
    switch_LED = true;
    
    digitalWrite(13, HIGH);
    digitalWrite(12, LOW);
  }
}

Hin- und Rücklaufende Welle mit Taster

Hier leuchten die LEDs nacheinander von rechts nach links auf. Durch Betätigung des Tasters dreht sich die Reihenfolge um.

Die LEDs werden an den Pins 8 bis 13 angeschlossen, der Taster an Pin 2 und +5V.

volatile bool links = false; //volatile, da false im Interrupt geändert wird

void setup() {
  pinMode(08, OUTPUT);
  pinMode(09, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  attachInterrupt(0, welle_links, RISING);    //Interrupt deklarieren
}

void loop() {
  if(links)  {                               //if links = true, läuft die Welle ständig nach links
      for(int i = 5; i >= 0; i--)  {
        digitalWrite(8 + i, HIGH);
        delay(1000);
        digitalWrite(8 + i, LOW);
    }
  }
  else { //sonst läuft die Welle nach rechts
      for(int i = 0; i <= 5; i++)   {
       digitalWrite(8 + i, HIGH);
       delay(1000);
       digitalWrite(8 + i, LOW);
    }
  }
}

void welle_links() {                            //Der Interrupt ändert nur die Variable und loop() reagiert darauf. 
  if(links)
     links = false;
   else
     links = true;
 }
Zuletzt geändert: Montag, 28. Februar 2022, 12:31