no se si te he pillado, pero después de llevar tiempo peleado con millis() he llegado a la conclusión que cuantas menos instrucciones entre lecturas mejor
if (acumulado > 2500) { // Si el valor de contactos seguidos es mayor que 2500 (así evito falsos positivos)...
ahora = millis(); // a la variable ahora le asigno el valor de millis
gap = ahora + 5000; // y a la variable gap el valor de ahora + 5000 ms
Serial.println("Contacto"); // en la aplicación real no será necesario el puerto de serie
digitalWrite(rele, HIGH); //<----- cambia aquí el HIGH
}
if (millis() < gap) { // Esta es la función que uso para soplar durante 5 segundos
diff = gap - millis();
// digitalWrite(rele, HIGH);
//dejamos esto para ver en pantalla
Serial.print("Soplamos (Queda por soplar ");
Serial.print(diff);
Serial.println(" ms)");
}
else
{
digitalWrite(rele, LOW); // Esta parte del código necesitaré mejorarla para que no la ejecute cuando el pin ya esté en LOW,
// Pero es que actualmente ni así funciona :(
}
// aunque yo anulaba todo el resto (desde if millis()) y pondría
if(millis()>gap && gap){
digitalWrite(rele, LOW);
gap=0;
}
Saludos