SOLUCIONADO -- Diferenciar pulso largo de corto

Hola chicos

Intento ampliar conocimientos en programación y querría saber la manera que tenéis para describir un pulso largo por una entrada digital.

Me explico:
Pretendo llegar a poder describir un código que sin llevar muchos condicionales pueda determinar cuando un pulso se recibe de manera constante y no durante una porción de segundo.

La única manera que encuentro es hacerlo con condiciones, en donde, justo después del primer if,, pondría un delay.
Si después de ese delay el pulso estaría activo, lo consideraría como definitivo, y terminaría de completar el condicional.

Supongo que hay formas más estilosas de describir esta situación, sin tener que completar un loop solo con condiciones.

Muchas gracias.

supongo que una manera mas interesante sería medirlo, sin delay, el delay detiene la operación del programa, no es apropiado en este caso.
Usa millis(). Dispara millis cuando se cumpla la condición 0 a 1 o flanco de subida por ejemplo, y apaga millis() cuando leas el flanco descendente 1 a 0.
Para aprender sobre millis() hay un tutorial en documentación pero debes buscarlo o mira el ejemplo del IDE BlinkWithoutDelay.ino.

  // definiciones

  bool a, aAnterior = false;
  unsigned long start, duracion;

// esto estará en el void loop()
  a = digitalRead(pin); // pin donde miras la señal digital
  if (a == HIGH && aAnterior == LOW){ // si hay flanco 0 a 1 entonces
     start = millis();
  }
 if (a == LOW && aAnterior == HIGH) { // si el flanco es 1 a 0, entonces detengo la cuenta
    duracion = millis()-start; // en milisegundos
 } 
 aAnterior = a; // guardo el estado de a para no repetir el arranque.
 // ahora tienes en  duracion lo que demoró el puso.
 // inicias el proces