Arduino digital Lecture erronée


10

J'ai installé mon Arduino UNO avec 4 fils d'entrée, ils se connectent au port 10, 11, 12, 13, ils sont connectés à ma planche à pain avec rien d'autre que le fil.

Mon code serait simplement:

Serial.println(digitalRead(13));
Serial.println(digitalRead(12));
Serial.println(digitalRead(11));
Serial.println(digitalRead(10));

Le fait est qu'après avoir branché brièvement une broche sur 5V ou 3V3, la lecture commencerait à devenir folle comme: 1 0 0 1 0 1 1 1 0 1 0 1 1 0 Sans aucun sens! Sans avoir de fil connecté directement à mon VCC (5V ou 3V3) la lecture change constamment, alors qu'elle devrait être nulle!

Mon Arduino est-il mort? Comment puis-je réparer cela?


Connectez simplement votre goupille de déclenchement à la masse lorsqu'elle n'est pas déclenchée!

Réponses:


18

Ce que vous avez s'appelle une Floatingépingle. Les broches d'entrée numérique sont très sensibles au changement et, à moins qu'elles ne soient entraînées positivement dans un état ou un autre (haut ou bas), elles capteront la capacité parasite des sources à proximité, comme les planches à pain, les doigts humains ou même l'air. Tout fil qui y est connecté agira comme une petite antenne et fera changer l'état d'entrée. Et je veux dire n'importe quel fil, la trace sur la carte, le fil de la planche à pain, la broche de la planche à pain, même la broche métallique du CI lui-même.

Ceci est indiqué dans la page de référence Arduino:

Si la broche n'est connectée à rien, digitalRead () peut retourner HIGH ou LOW (et cela peut changer de façon aléatoire).

Si vous regardez le tutoriel Arduino Digital Pin :

Cela signifie également cependant que les broches d'entrée sans rien qui leur est connecté, ou avec des fils qui y sont connectés qui ne sont pas connectés à d'autres circuits, signaleront des changements apparemment aléatoires dans l'état des broches, captant le bruit électrique de l'environnement ou couplant capacitivement l'état d'une épingle à proximité.

Il est souvent utile de diriger une broche d'entrée vers un état connu si aucune entrée n'est présente. Cela peut être fait en ajoutant une résistance de pullup (à + 5V), ou une résistance de pulldown (résistance à la masse) sur l'entrée, 10K étant une valeur commune. Il existe également des résistances de pullup 20K pratiques intégrées dans la puce Atmega accessibles à partir du logiciel. Ces résistances de rappel intégrées sont accessibles de la manière suivante.

pinMode(pin, INPUT);           // set pin to input
digitalWrite(pin, HIGH);       // turn on pullup resistors

Ces résistances de traction faibles forcent l'état de la broche d'entrée dans un état connu et sont facilement remplacées par des tensions d'entrée plus fortes, comme une connexion directe à la terre ou + 5v.


2
Que diriez-vous de mentionner pinMode(pin, INPUT_PULLUP)? C'est facile à retenir et vraiment difficile à foutre.
piojo

6

C'est normal. À moins qu'une entrée ne soit connectée à quelque chose, elle affichera HIGH ou LOW ou changera constamment. Ceci est décrit par la page de référence digitalRead sur le site Web Arduino.

La broche d'entrée se comporte avec une petite capacité, donc une brève connexion à 3V3 ou 5V chargera la capacité. Vous pouvez trouver un effet similaire en utilisant un doigt nu.

Vous pouvez éviter le problème en ajoutant une résistance de grande valeur entre la broche et GND.

Demandez-vous pourquoi vous vous attendez à zéro?


1
pinMode (broche, INPUT_PULLUP);
jippie
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.