Difficulté avec des conditions sur intervalles de valeurs sur une entrée analogique

Bonjour,
je me suis lancé dans un projet en autodidacte : "tape-taupe" avec boutons poussoirs lumineux. Chaque bouton poussoir appuyé me donne une tension "spécifique" sur l'entrée A0 (pont de résistance).
Je veux tester la valeur de cette tension pour juger si le bon BP a été appuyé.
Comme mes tensions fluctuent lorsque j'appuie sur le BP, je voudrais accepter par exemple des tensions entre 60 et 120 mV pour le 1e BP. J'ai testé la condition :

if (60<analogRead(A0) && analogRead(A0)<120 )
  {
    temps_necessaire=millis()-temps_initial;
    alea=6;
    score=score+800-temps_necessaire;
    digitalWrite(led5,LOW);
  }

Mais le BP qui donne une tension de 950 mV quand j'appuie dessus me fait monter le score (comme si ce BP satisfaisait la condition ci-dessus)

Y'a-t-il une erreur évidente dans ce bout de code ? ou alors une caractéristique des valeurs prises par l'entrée analogique que je ne comprends pas ?

Merci d'avance
Roberto

PS : je n'ai pas su comment poster mon code entier (il fait 220 lignes et n'est sûrement pas très élégant) et ne sais pas si ça se fait sur ce forum :wink:

Bonjour, et bienvenue,

Je pense que pour y voir plus claire, il faudrait aussi un aperçut du schéma de câblage.

Ensuite, n'ayant pas l'integralité du code, on ne voit pas vraiment ce que vous voulez faire en code.

Toujous est'il que "analogRead" donne un résultat en 10, 12 ou 14 bits selon le modéle d'Arduino.
Admettons que se soit en 10 bits, ce serait un résultat entre 0 et 1023.
avec une réference de tension de 5V.
-Convertir 60mV en 10 bits donne 1023/50.06=13
-Convertir 120mV en 10 bits donne 1023/5
0.12=25
-Convertir 950mV en 10 bits donne 1023/5*0.95=195

Dans

(60<analogRead(A0) && analogRead(A0)<120 )

Vos seuils ne doivent pas être en mV mais en valeurs numérique

(13<analogRead(A0) && analogRead(A0)<25 )

Bonjour roberto_gcl

C'est donc que tu fais l'équivalent d'un clavier analogique:

Dans ce cas, tu te faciliterai la tâche en utilisant une bibliothèque comme ezAnalogKeypad
image

Tu peux utiliser l'exemple Calibration, pour étalonner tes boutons.

Cordialement
jpbbricole

pas vraiment d'erreur mais vous faites deux lectures consécutives de A0 donc il se peut qu'entre temps avec les rebonds la valeur ait varié et donc la comparaison n'est pas "constante"

écrivez plutôt

int valeurBouton = analogRead(A0);
if (valeurBouton > 60 && valeurBouton < 120) {
  ...
}

là au moins vous êtes sûr que vous utilisez la même valeur dans la comparaison.

erreur
@jml :
:thinking:c'est cette façon de coder qui m'a trompé :woozy_face:

mais tu avais corrigé en #4
:+1:

@dfgh c'est un peu court :slight_smile:

Merci
c'était exactement ça le problème !
Bonne journée

cool

bonne continuation !