Ach, nun wurde hier schon viel geschrieben, das habe ich nicht alles gelesen.
Die Notwendigkeit eines Merkers wurde ja schon erwähnt, dazu habe ich einen Vorschlag, bei dem ich mich an #5 orientiert habe:
#include <IRremote.h>
const byte Hp0 = 2; // Rote LED
const byte Hp0r = 3; // Rote LED
const byte Hp1 = 4; // Grüne LED
const byte Hp2 = 5; // Gelbe LED
const byte Ra121 = 6; // Weiße LED
const byte Ra122 = 7; // Weiße LED
const byte Zs7 = 8; // Gelbe LED
const byte IR_Empf = 11;
bool blinkenRa121 = false; // Merker für Blinken
// 0, 1, 2, 3, 4, 5, #, *, 9
//constexpr uint32_t IRCODE[] = {16750695, 16753245, 16736925, 16769565, 16720605, 16712445, 16756815, 16738455, 16748655};
constexpr uint32_t IRCODE[] = {0xFF6897, 0xFF30CF, 0xFF18E7, 0xFF7A85, 0xFF10EF, 0xFF38C7, 0xFF5AA5, 0xFF42BD, 0xFF52AD}; // Car mp3 Fernbedienung
IRrecv irrecv (IR_Empf);
decode_results results;
/// functions ///
void setLed(bool hp0, bool hp0r, bool hp1, bool hp2, bool ra121, bool ra122, bool zs7, bool _blinkenRa121) {
digitalWrite (Hp0, hp0);
digitalWrite (Hp0r, hp0r);
digitalWrite (Hp1, hp1);
digitalWrite (Hp2, hp2);
digitalWrite (Ra121, ra121);
digitalWrite (Ra122, ra122);
digitalWrite (Zs7, zs7);
blinkenRa121 = _blinkenRa121;
}
void blinken (void)
{
if (blinkenRa121)
{
const uint32_t INTERVALL = 500;
uint32_t jetzt = millis();
static uint32_t vorhin = -INTERVALL;
if (jetzt - vorhin >= INTERVALL)
{
vorhin = jetzt;
digitalWrite (Ra121, !digitalRead(Ra121));
}
}
}
////////
void setup()
{
// put your setup code here, to run once:
irrecv.enableIRIn ();
Serial.begin (9600);
Serial.println ("\nStart");
pinMode (Hp0 , OUTPUT);
digitalWrite (Hp0, HIGH);
pinMode (Hp0r, OUTPUT);
digitalWrite (Hp0r, HIGH);
pinMode (Hp1, OUTPUT);
digitalWrite (Hp1, LOW);
pinMode (Hp2, OUTPUT);
digitalWrite (Hp2, LOW);
pinMode (Ra121, OUTPUT);
digitalWrite (Ra121, LOW);
pinMode (Ra122, OUTPUT);
digitalWrite (Ra122, LOW);
pinMode (Zs7, OUTPUT);
digitalWrite (Zs7, LOW);
pinMode (13, OUTPUT);
digitalWrite (13, LOW);
}
void loop() {
blinken();
if (irrecv.decode(&results))
{
uint32_t fbcode = results.value;
Serial.print(fbcode, HEX); Serial.print ('\t'); Serial.println (fbcode, DEC);
switch (fbcode)
{
case IRCODE[0]: //0
// Hp0, Hp0r, Hp1, Hp2, Ra121, Ra122, Zs7, blinkenRa121
setLed(1, 1, 0, 0, 0, 0, 0, 0);
break;
case IRCODE[1]: //1
// Hp0, Hp0r, Hp1, Hp2, Ra121, Ra122, Zs7, blinkenRa121
setLed(0, 0, 1, 0, 0, 0, 0, 0);
break;
case IRCODE[2]: //2
// Hp0, Hp0r, Hp1, Hp2, Ra121, Ra122, Zs7, blinkenRa121
setLed(0, 0, 1, 1, 0, 0, 0, 0);
break;
case IRCODE[3]: //3
// Hp0, Hp0r, Hp1, Hp2, Ra121, Ra122, Zs7, blinkenRa121
setLed(1, 0, 0, 0, 1, 1, 0, 0);
break;
case IRCODE[4]: //4
// Hp0, Hp0r, Hp1, Hp2, Ra121, Ra122, Zs7, blinkenRa121
setLed(1, 0, 0, 0, 1, 0, 0, 0);
break;
case IRCODE[5]: //5
// Hp0, Hp0r, Hp1, Hp2, Ra121, Ra122, Zs7, blinkenRa121
setLed(1, 0, 0, 0, 0, 0, 0, 1);
break;
case IRCODE[6]: //#
// Hp0, Hp0r, Hp1, Hp2, Ra121, Ra122, Zs7, blinkenRa121
setLed(1, 1, 1, 1, 1, 1, 1, 0);
break;
case IRCODE[7]: //*
// Hp0, Hp0r, Hp1, Hp2, Ra121, Ra122, Zs7, blinkenRa121
setLed(0, 0, 0, 0, 0, 1, 0, 0);
break;
case IRCODE[8]: //9
// Hp0, Hp0r, Hp1, Hp2, Ra121, Ra122, Zs7, blinkenRa121
setLed(1, 0, 1, 0, 1, 0, 0, 0);
break;
}
irrecv.resume();
}
}
Das Feld IRCODE[] habe ich eingeführt, um schneller zwischen Deiner und meiner Fernbedienung wechseln zu können.
Ob ein Lokführer damit glücklich wäre, weiß ich nicht, aber Leuchten tut etwas, Blinken auch.
EDIT: Funktion blinken() hinsichtlich Blinkzeit verändert: vorhin = jetzt;