In einer Schleife trotz Blinken unterbrechen

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;