Управление диодами с ИК пульта с функцией millis()

Уважаемые знатоки, прошу помочь с написанием кода. Суть такова, необходимо с пульта ИК управлять несколькими светодиодами (включением и выключением на свои кнопки пульта). Все получилось, но не могу управлять парой светодиодов - на них использую функцию millis(). В скече кнопка 1 работает нормально, кнопка 2 включает диоды но они уже не моргают с нужным интервалом - просто загораются.

#include <IRremote.hpp>
#define IR_RECEIVE_PIN 8
uint32_t tmr1;
uint32_t tmr2;
bool flag1;
bool flag2;
#define period1 1500
#define period2 50
#define period3 3500
#define period4 50
int ledPin1 = 3;
int ledPin2 = 9;
int ledPin3 = 10;

void setup() {
  Serial.begin (9600);
  IrReceiver.begin (IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
  pinMode (ledPin1, OUTPUT);
  pinMode (ledPin2, OUTPUT);
  pinMode (ledPin3, OUTPUT);
}

void loop() {
  if (IrReceiver.decode ()) {
    switch (IrReceiver.decodedIRData.decodedRawData) {
        case 0xEE11FB04:
        Serial.println ("кнопка №1");
        digitalWrite (ledPin1, !digitalRead (ledPin1));
        break; 
        case 0xED12FB04:
        Serial.print ("кнопка №2");
          if (millis() - tmr1 >= (flag1 ? period1 : period2)) {
          tmr1 = millis();
          digitalWrite (ledPin2, flag1);
          flag1 = !flag1; 
          }
          if (millis() - tmr2 >= (flag2 ? period3 : period4)) {
          tmr2 = millis();
          digitalWrite (ledPin3, flag2);
          flag2 = !flag2;
          }
        break;
    }
    IrReceiver.resume ();
  }
}

Вы же не держите кнопку нажатой постоянно.
В switch , в нужном case установите флаг.
А проверку таймеров в миллис, делайте непрерывно в loop()