Dudas con mantener una función sin pausar el loop

surbyte:
A ver.. no puedes ser tan impreciso con algo que justamente requiere precision, o de lo contrario tendras que montar algo que te diga cuando hay una pieza además de la pieza larga.
Eso te daría la orden que te falta para dejar de soplar.

Comprendo que la cienta no tenga velocidad constante pero entonces aporta datos a tu Arduino para que pueda resolver el problema.
La manera a mi parecer sería

Con un sensor optico tal que corte un haz de luz IR por ejemplo. De hecho podrias usarlo para los dos casos. Uno para indicar piezas y otro para indicar piezas largas mejor que lo que estas usando, pero es una idea.

Al detectar la pieza larga tu sabes porque vas contando cuantas van entre medio y puedes accionar el soplador de modo seguro.
Se entiende?

El problema es que la velocidad puede ser cambiada en en algunos momentos. Si hay piezas "normales" o no hay piezas me da igual (la cinta va a avanzar siempre). De hecho puede haber tramos en los que no haya pieza (la máquina que las pone se ha quedado sin, fallos en fases previas, etc...)

Mi único problema son las largas. Por eso quiero soplar durante 5 segundos cuando detecte una larga al tocar la trampilla aunque eso suponga descartas piezas buenas.

Son piezas de alambre, he hecho pruebas con sensores ópticos y no eran fiables, lo único que me ha detectado al 100% ha sido sensores inductivos y por contacto. Al poder haber diferentes longitudes dentro de las NO-OK, la trampilla ha sido la mejor solución, ya que si la pieza era muy larga podía colisionar con el sensor inductivo. Para evitar falsos positivos por vibraciones he puesto la condición en el programa que no baste con un cambio de estado en el pin que detecta el contacto, si no que sea necesario un contacto seguido durante algunos ms.

De hecho, para paliar la falta de precisión en el montaje, prefiero que tan pronto hay contacto, se active la electroválvula durante un tiempo seguro (a pesar que esto signifique descartar piezas buenas que iban delante de la pieza larga).

No entiendo porqué, una vez está iniciada la cuenta atrás no soy capaz de reasignar el valor de ahora y de gap para que el soplido siga durante 5 segundos más.