#define rele_pin 2
#define button_pin 3

bool flag = false;
bool flag_state = false;
uint32_t btnTimer = 0;

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

void loop() {
  // читаем инвертированное значение для удобства
  bool btnState = !digitalRead(button_pin);
  if (btnState && !flag && millis() - btnTimer > 100) {
    flag = true;
    flag_state = !flag_state;
    btnTimer = millis();
    // Serial.println(String("flag_state=") + flag_state);
    // digitalWrite(13, 1);

  }
  if (!btnState && flag && millis() - btnTimer > 100) {
    flag = false;
    btnTimer = millis();
  }
digitalWrite(rele_pin, flag_state);
      

}