const byte ledPin = LED_BUILTIN;

const unsigned long timeout_ON = 2000;
const unsigned long timeout_OFF = 500;
unsigned long lastEvent;

enum : byte {LED_ON, LED_OFF} state = LED_OFF;

void ledOn() {
  digitalWrite(ledPin, HIGH);
  state = LED_ON;
  lastEvent = millis();
  Serial.println(F("ON"));
}

void ledOff() {
  digitalWrite(ledPin, LOW);
  state = LED_OFF;
  lastEvent = millis();
  Serial.println(F("OFF"));
}

void process() {
  switch (state) {
    case LED_ON:
      if (millis() - lastEvent > timeout_ON) ledOff();
      break;

    case LED_OFF:
      if (millis() - lastEvent > timeout_OFF) ledOn();
      break;
  }
}

void setup() {
  pinMode(ledPin, OUTPUT);
  ledOff();
  Serial.begin(115200);
}

void loop() {
  process();
}