Dudas con mantener una función sin pausar el loop

Hola,

Intente entender el codigo pero me perdia asi que lo cargue en un nano para entenderlo

Agrega la linea:

Serial.println(acumulado);

En la parte que imprimes y entenderas el error.

Cuando haces contacto por primera vez (y lo mantienes) "acumulado" ya vale mas de 2500 por eso va bien, pero si desconectas "acumulado" pasara a valer 0 y ya nunca mas pasara por la zona en donse se guarda el tiempo donde se empieza a soplar, ese es el error.

Me parece que es mas sencillo:

Solo debes hacer dos cosas en el loop:

a) Si hay contacto debes guardar la hora, si no lo hay nada. De esta manera siempre tendras la hora del ultimo contacto.

b) Si estas dentro los cinco segundos posteriores al ultimo contacto (dato de hora guardado) debes soplar, si no nada.

Con respecto a los falsos positivos no entiendo bien la razon pero si dices que no te importa perder algunas piezas, en el peor de los casos solo tendras cinco segundos de perdidas en cada falso positivo.