Problema con tiempo limite de pulsaciones de boton

Buenas tardes

Estoy armando algo en un Attiny85 y estoy tenniendo problemas para controlar el tiempo en el que un pin debe pasar a estado LOW al presionar un pulsador

La logica del programa seria la siguiente

Tengo un solo pulsador para todo
Al hacer 5 cliks en el pulsador se pasa del modo on, al modo off. Aqui no hay problema
Al presionar el boton de manera sostenida, primero chequea que una bateria este por encima de 6.8V y en caso contrario enciende un led en el pin1 (hasta aqui todo bien).
Luego , si el voltaje esta bien, enciende otro led en el pin0, pero este led no deberia permanecer encendido por mas de 10 segundos. es decir, que aunque el boton siga presionado, deberia apagarse el led y solamente volver a encenderse si se suelta el pulsador y se vuelve a presionar

Se que no deberia ser algo muy complejo pero no hay manera de que me salga, podrian darme una mano? Les dejo el codigo para que lo vean y me orienten como puedo hacer. Gracias

#define PinPulsador  2
#define INTERVALO    500 
int estado_inicial;
int estado_final;
bool estado, estado_ant = false;
byte contador = 0;
long start;
bool estadoOn = true;
int counter;
unsigned long t;


void setup(){
//Serial.begin(9600);
pinMode(2, INPUT_PULLUP);
pinMode(0, OUTPUT);
pinMode(1, OUTPUT);

}
void loop() {

//Debounce  
estado_inicial = digitalRead (2);
delay(50);
estado_final= digitalRead (2);
if (estado_inicial== LOW && estado_final== LOW) {
  estado= true;
} else
{
  estado=false;
}
// fin Debounce    
    
    if (estado && !estado_ant) { // si el estado del pulsador es diferente al estado anterior
       contador +=1; // sumo 1 pulsacion
       start = millis();        // y empiezo a contar el tiempo 
      
    }
    
    estado_ant = estado;           // guardo el estado actual como anterior on
  
  
    
 
  
  
    if (millis() - start > INTERVALO) {        // si el tiempo que paso desde la pulsacion es mayor a medio segundo, dejo de contar
                
          if (contador==5) {
            estadoOn = !estadoOn;
            for (counter = 0; counter < 5; ++counter) {   
            digitalWrite(1, HIGH);
            delay(100);
            digitalWrite(1, LOW);
            delay(100);
          }
          }
       contador = 0;                  // pongo a 0 el contador       
    
}


 if (digitalRead(2)==LOW && estadoOn) {

  //--------------------------------------boton pulsado--------------------------------------
  
   
   
 
     
      if (analogRead(A2) * (0.0347) <= 6.8) {
         
          digitalWrite(0, LOW);
          digitalWrite(1, HIGH);
          
          
        
      } else {
         
            digitalWrite(1, LOW);
            digitalWrite(0, HIGH);
            
        
        
        
      }
    
   
   
       
    
 
   //-------------------------------------------Fin Boton Pulsado------------------------------
  
 } // cierra disparo

  
   
 
 else {
  digitalWrite (0, LOW); 
  digitalWrite(1, LOW);
  
 }
  
  
}

Tu código requiere de algunas correcciones y se te estan mezclando cosas.
Cuando haces o intentas programas diferentes acciones es importante que la finalización de una no comprometa el accionar de otra función.
Para ello el uso de una máquina de estados asegura que siempre estas en el lugar correcto y solo sales cuando se establecen las condiciones para cambiar de estado.

Hablas de 3 situaciones y no importa si dos estan bien y la tercera mal. Para el caso es lo mismo.
Yo veo acciones como la de intervalo con millis() que una vez accionado no termina jamás porque no hay un flag que lo desactive.

Asi que te aconsejo por un lado que leas en Documentación como trabajar como máquina de estados pero ahora para resolver tu problema mediato es que te diré como corregir esto.

Yo agregué un flag que se activa cuando inicializas tu variable con millis() y se apaga cuando contador = 5;
Si no es correcto el lugar ubícalo de tal modo que cumplida la condición de tiempo esta no continue porque tu condición le permite seguir indefinidamente.

if (millis() - start > INTERVALO) {

No hay nada que una vez iniciada detenga esta condición.
Ahora esta es mi sugerencia que debes probar.

#define PinPulsador  2
#define PinLed1      0
#define PinLed2      1
#define INTERVALO    500

int estado_inicial;
int estado_final;
bool estado, estado_ant = false;
byte contador = 0;
long start;
bool estadoOn = true;
int counter;
unsigned long t;
bool flag = false;

void setup(){
  //Serial.begin(9600);
  pinMode(PinPulsador, INPUT_PULLUP);
  pinMode(PinLed1, OUTPUT);
  pinMode(PinLed2, OUTPUT);
}

void loop() {
  //Debounce 
  estado_inicial  = digitalRead(PinPulsador);
  delay(50);
  estado_final    = digitalRead(PinPulsador);

  if (estado_inicial == LOW && estado_final== LOW) {
    estado = true;
  } else  {
    estado=false;
  }
  // fin Debounce   

  if (estado && !estado_ant) { // si el estado del pulsador es diferente al estado anterior
      contador +=1; // sumo 1 pulsacion
      start = millis();        // y empiezo a contar el tiempo
      flag = true;
  }
  estado_ant = estado;           // guardo el estado actual como anterior on

  if (millis() - start > INTERVALO) {        // si el tiempo que paso desde la pulsacion es mayor a medio segundo, dejo de contar
      if (contador==5) {
          estadoOn = !estadoOn;
          for (counter = 0; counter < 5; ++counter) {   
              digitalWrite(PinLed2, HIGH);
              delay(100);
              digitalWrite(PinLed2, LOW);
              delay(100);
          }
          flag = false;
      }
      contador = 0;                  // pongo a 0 el contador      
  }

  if (digitalRead(PinPulsador)==LOW && estadoOn) {
      //--------------------------------------boton pulsado--------------------------------------
      if (analogRead(A2) * (0.0347) <= 6.8) {
          digitalWrite(PinLed1, LOW);
          digitalWrite(PinLed2, HIGH);
      } else {
          digitalWrite(PinLed2, LOW);
          digitalWrite(PinLed1, HIGH);
      }
      //-------------------------------------------Fin Boton Pulsado------------------------------
  } // cierra disparo
  else {
      digitalWrite(PinLed1, LOW);
      digitalWrite(PinLed2, LOW);
  } 
}

Muchas gracias surbyte por tu respuesta. Entiendo lo que intentas decirme y tienes razon. Voy a estudiar bien el tema y cualquier cosa los vuelvo a molestar

Muchas gracias

No se en que me das la razón. No tengo la razón en todo.
Tu programa se puede subsanar con el parche que te sugiero que no se del todo por no probarlo si hace lo que esperas.
Una máquina de estados haría las cosas mas prolijas, eso si. Pero que se puede hacer como lo has hecho ninguna duda.