// Bibliothek Bounce einbinden
#include "Bounce2.h"
// Bounce starten
// Namen des Objekts Bounce (TasterGedrueckt) festlegen
Bounce TasterGedrueckt = Bounce();
// Pin für den Auslöser des Interrupts
int TASTER = 2;
// Array mit 5 Elementen und den zugehörigen Pins
// wenn LEDs hinzugefügt werden -> Größe des Arrays in [...] anpassen
int LED[5] = { 3, 4, 5, 6, 7 };
// Anzahl der LEDs feststellen
int LEDMax = sizeof(LED) / sizeof(LED[0]);
// Leuchtdauer der LEDs
int Leuchtdauer = 100;
// Variable im Flash-Speicher ablegen
volatile bool LEDStatus = true;
void setup()
{
// pinMode Taster INPUT_PULLUP -> Vorwiderstand einschalten
pinMode(TASTER, INPUT_PULLUP);
// pinMode LEDs
for (int i = 0; i < LEDMax; i++) {
pinMode(LED[i], OUTPUT);
}
// Funktion Schalten() dem Interrupt-Pin zuordnen
attachInterrupt(digitalPinToInterrupt(TASTER), Schalten, FALLING);
TasterGedrueckt.attach(TASTER, INPUT_PULLUP);
}
void loop()
{
// Taster abfragen
/*
solange der Status true ist, wird die while-Schleife
ausgeführt, ein weiterer Druck auf eine Taste der Fernbedienung löst
den Interrupt aus
-> Status wird zu false, die while-Schleife wird nicht erneut ausgeführt
allerdings wird der aktuelle Durchlauf erst beendet
*/
if (TasterGedrueckt.update())
{
// Taster wurde gedrückt, das Signal ist gefallen
if (TasterGedrueckt.fell())
{
LEDStatus = true;
/*
solange der Status true ist, wird die while-Schleife
ausgeführt, ein weiterer Druck auf eine Taste der Fernbedienung löst
den Interrupt aus
-> Status wird zu false, die while-Schleife wird nicht erneut ausgeführt
allerdings wird der aktuelle Durchlauf erst beendet
*/
while (LEDStatus) LauflichtHinUndHer();
}
}
}
// der Interrupt durch den Taster setzt den LEDStatus auf false
void Schalten()
{
LEDStatus = false;
}
void LauflichtHin()
{
for (int i = 0; i < LEDMax; i++)
{
digitalWrite(LED[i], HIGH);
delay(Leuchtdauer);
digitalWrite(LED[i], LOW);
}
}
void LauflichtHinUndHer()
{
for (int i = 0; i < LEDMax; i++)
{
digitalWrite(LED[i], HIGH);
delay(Leuchtdauer);
digitalWrite(LED[i], LOW);
}
// und wieder zurück
for (int i = LEDMax - 1; i >= 0; i--)
{
digitalWrite(LED[i], HIGH);
delay(Leuchtdauer);
digitalWrite(LED[i], LOW);
}
}
Letzte Aktualisierung: