J-M-L:
Non car il y a déjà un .049 et la variableaverage
qui fait basculer tout le calcul en flottant ...
C'est vrai. Je croyais que la valeur la plus extérieure (1000) donnait le ton. Mais bon, je serai toujours surpris par les subtilités du C.
Pour autant, j'ai essayé votre formule avec un simple Serial.println(average) et en remplaçant la lecture analogique par 1023 : on affiche bien une valeur ... qui plus est, croit avec le temps et tend vers l'infini..
Votre problème vient de la lecture analogique.
Par ailleurs, votre formule décrit le comportement d'un intégrateur.
Pour qu'elle se comporte comme un filtre passe-bas, il faut l'écrire ce cette façon :
average = A * average + B * nouvelle_lecture
avec A + B = 1. Par exemple, A = 0.9 et B = 0.1.
Plus le rapport A / B sera grand, plus le filtrage sera efficace mais plus le résultat sera long à obtenir.
Cordialement.
Pierre