Sur les nouveaux Arduinos, on peut définir pinMode sur lun des trois états suivants: OUTPUT
, INPUT
et INPUT_PULLUP
.
Cette page dit:
La puce Atmega de lArduino a des résistances de pull-up internes (résistances qui se connectent à lalimentation en interne) auxquelles vous pouvez accéder. Si vous préférez les utiliser au lieu de résistances pull-down externes, vous pouvez utiliser largument INPUT_PULLUP dans pinMode (). Cela inverse effectivement le comportement, où HIGH signifie que le capteur est éteint et LOW signifie que le capteur est allumé.
Je suis plutôt sûr que linversion du comportement nest pas la seule chose quil fait, cependant.
Que fait INPUT_PULLUP
? Quest-ce qui le différencie de INPUT
, et comment décider lequel utiliser?
Commentaires
- INPUT_PULLUP a été ajouté avec IDE 1.0.1. La carte Arduino que vous utilisez na pas dimportance, elles prennent toutes en charge les PULLUP.
Réponse
La valeur par défaut est INPUT
qui définit la broche comme INPUT
. Si la broche est totalement déconnectée, elle lira au hasard HIGH
et LOW
. Si vous le liez à + 5V ou 0V, il lira évidemment HIGH
ou LOW
.
Interne à lArduino, la puce Atmega possède des résistances de pullup internes dune valeur denviron 20k ohms. (Voir la documentation de DigitalPins pour plus de détails) Ces résistances peuvent être éventuellement connectées en interne à laide de INPUT_PULLUP
. Cela équivaut fonctionnellement (et électriquement) à connecter une résistance de ~ 20k ohms entre la broche et + 5V, la seule différence est quelle ne nécessite aucun composant externe et que vous pouvez lallumer et léteindre dans le logiciel pendant lexécution de votre programme.
Alors pourquoi des pull-ups et non des pull-down? Il y a probablement plusieurs raisons à cela, mais lorsque vous connectez des boutons ou des interrupteurs ou tout ce qui est « normalement ouvert », il vous suffit de les relier à la terre, vous navez pas besoin de leur faire passer + 5V. conçu avec de grandes coulées de masse pour des raisons de blindage de toute façon, la liaison à la terre est pratiquement des raisons.
Certains circuits intégrés plus fonctionnels comme les puces ARM ont à la fois des pull ups et des pull down, mais la ligne AVR 8 bits nest livrée quavec pull -ups. Noubliez pas que HIGH
est « ouvert » et LOW
est « fermé ».
Commentaires
- Vote positif. Pour info, selon la documentation, les pull-ups internes sont de 20K, pas que cela fasse une grande différence par rapport à 50K. arduino.cc/en/Tutorial/DigitalPins
Answer
Notez que la précédente à 1.0.1, vous pouvez activer les pullups en utilisant digitalWrite()
. Et vous pouvez toujours.
Le code:
Cest une distinction importante car INPUT_PULLUP
active évidemment la résistance pull-up. Cependant, moins évident, cest quà partir de la version 1.0.1, le simple fait dappeler INPUT
force le pull-up à être désactivé. (Auparavant, létat du pull-up restait le même).
Pour voir comment une épingle fonctionne avec et sans pull-ups, regardez les vidéos suivantes.
Broche flottante sur un oscilloscope: http://www.youtube.com/watch?v=dBIBFLYCjMM
Avec Pull-Up activé: http://www.youtube.com/watch?v=SAIw7LLVl-U
Tutoriel vidéo complet sur Pull-Ups (notez que jai fait ceci avant que INPUT_PULLUP ne soit ajouté à la bibliothèque Arduino): http://www.youtube.com/watch?&v=jJnD6LdGmUo
Commentaires
- Très intelligent. Merci davoir écrit ceci. Vote pour.