#define rele_pin 2
#define button_pin 3
#define rele_timer 5*1000

bool flag = false; // регестрируемое состояние кнопки
bool flag_long = false;

bool flag_state = false;// состояние реле
bool flag_state_short = false;// режим реле 1 -долгий
bool last_btnState = false; // регестрируемое состояние кнопки
uint32_t btnTimer = 0;
uint32_t releTimer = 0;

void setup() {
  Serial.begin(9600);
  pinMode(button_pin, INPUT_PULLUP);
  pinMode(rele_pin, OUTPUT);
}

void loop() {
  // читаем инвертированное значение для удобства
  bool btnState = !digitalRead(button_pin);

  if (last_btnState != btnState) { //изменилось состояние
    btnTimer = millis();
    last_btnState = btnState;
    flag = true;
     flag_long=true;
  }

  if (btnState && flag &&  millis() - btnTimer > 50) {//фиксируе нажатие 
    flag_state = !flag_state;
    Serial.println(last_btnState);
    flag = false;
    flag_state_short=true; // устанавливаем короткий режим
    releTimer=millis();
  }

  if (flag_state && flag_state_short && millis() -releTimer> rele_timer){// отключаем реле при коротком режиме
   flag_state_short==false; 
   flag_state=false;
  }

  if (btnState && flag_long &&  millis() - btnTimer > 1000) {// фексируем длинное нажатие
    flag_state = true;
    flag_state_short=false; // устанавливаем долгий режим
    Serial.println(2);
    flag_long = false;
    // Serial.println(String("flag_state=") + flag_state);
    // digitalWrite(13, 1);

  }
  if (!btnState && flag &&  millis() - btnTimer > 50) { //фиксируем отпускание
    // flag_state = false;
    // btnTimer = millis();
    flag = false;
    flag_long=false;
    Serial.println(last_btnState);
  }
  digitalWrite(rele_pin, flag_state);


}