Programmierbeispiele mit Arduino IDE
Abschlussbedingungen
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