#include "IRremote.h"
// Pin für den Auslöser des Interrupts
int InterruptPin = 2;
// Array mit 5 Elementen und den zugehörigen Ports
int LED[5] = {3, 4, 5, 6, 7};
// Anzahl der LEDs feststellen
int LEDMax = sizeof(LED) / sizeof(LED[0]);
// Variable im Flash-Speicher ablegen
volatile bool Status = true;
int Leuchtdauer = 100;
void setup()
{
// Zufallsgenerator starten
randomSeed(analogRead(A0));
// Empfänger starten
IrReceiver.begin(InterruptPin);
for (int i = 0; i < LEDMax; i++)
{
pinMode(LED[i], OUTPUT);
}
// Funktion Schalten() dem Interrupt-Pin zuordnen
attachInterrupt(digitalPinToInterrupt(InterruptPin), Schalten, FALLING);
}
void loop()
{
// Daten lesen
if (IrReceiver.decodedIRData.address == 0)
{
if (IrReceiver.decode())
{
delay(200);
Status = true;
/*
solange der Status true ist, wird die jeweilige 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
*/
switch (IrReceiver.decodedIRData.command)
{
// Taste 1: Lauflicht vor
case 22:
while (Status) LauflichtHin();
break;
// Taste 2: LEDs leuchten vor und zurück
case 25:
while (Status) LauflichtHinUndHer();
break;
// Taste 3: LEDs blinken nacheinander
case 13:
while (Status) LauflichtMitBlinken();
break;
}
// nächsten Wert lesen
IrReceiver.resume();
}
}
}
void Schalten()
{
Status = false;
}
void LEDBlinken(int LEDNummer, int Anzahl)
{
for (int i = 0; i <= Anzahl; i++)
{
digitalWrite(LEDNummer, HIGH);
delay(Leuchtdauer);
digitalWrite(LEDNummer, LOW);
delay(Leuchtdauer);
}
}
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);
}
}
void LauflichtMitBlinken()
{
for (int i = 0; i < LEDMax; i++)
{
int Anzahl = random(1, 5);
/* aktuelle LED i einschalten
⇒ Funktion LEDBlinken aufrufen
*/
LEDBlinken(LED[i], Anzahl);
}
}
Letzte Aktualisierung: