Etape 1: Connexion du bouton
Il s’agit d’un interrupteur momentané, avec une position stable (ouvert) lorsqu’aucune force n’est exercée et la direction (privée) lorsque vous appuyez sur. C’est un du plus simple dispositif de détection électromécanique.
Connecter le bouton comme illustré sur la photo de cette étape.
(Ne pas être impressionné par la taille de ma maquette. Un petit sera effectivement plus pratique.)
La broche e/s
L’AVR (aka ATmega, c'est-à-dire la puce Atmel alimentant la carte Arduino) a plusieurs broches d’e/s. I/O signifie qu’ils peuvent être configurés librement par le logiciel comme entrée ou sortie.
Broche 2 sera un bon choix pour notre exemple. Il sera utilisé pour mesurer l’état du bouton : enfoncé ou relâché.
Résistance de pull-up
La tige doit être connecté à quelque part grâce à la touche. La question est : où.
Une première idée serait d’aller à VCC. SCR est la dénomination usuelle pour la tension d’alimentation 5V ici.
Donc lorsque le bouton est enfoncé, l’axe serait connecté à VCC, et le logiciel se lirait haute. Mais lorsque le bouton est relâché, la broche est reliée à nulle part, alias « flottant » et sera exposée au bruit, et le logiciel va lire à haute et basse de manière erratique.
Donc la solution est d’utiliser un soi-disant pull-up ou la résistance de la liste déroulante. Une telle résistance veille à ce que la broche est toujours liée au GND ou SCR, directement ou par l’intermédiaire de la résistance, selon la position du bouton.
Heureusement, la puce AVR dispose, en interne, une résistance de pull-up de 20 kOhm qui peut être connectée à la broche (en interne). Le code pin doit être configuré comme entrée, et sa valeur, dans ce cas, dit si la traction est connectée (dans le cas contraire la valeur définit, quand la broche est configurée en sortie, son état de sortie).
Avec ce pull-up, nous allons se connecter la broche GND via le bouton et avoir ces situations lorsque le bouton est relâché, respectivement pressé :
Button not pressed: VCC | 20K | | internal | | pull-up |_| | | _____ input ––––*––––––o–––––––––o o––––– GND pin released button
Entrée est isolée de la GND, alors seulement connecté à VCC par l’intermédiaire de la résistance. Aucun flux actuels.
Sans la résistance de pull-up, l’entrée serait « flotter ».
Button pressed: VCC | : 20K | | : internal | | : pull-up |_| : some current flows | `- - - - - - - - - -> | input ––––*––––––o–––––––––o–––––o––––– GND pin pushed button
Entrée est directement connectée à GND. Certains courant circule à travers la résistance.
Dans les deux cas, nous avons maintenant une situation clairement définie.
Consommation
Lorsque le bouton est enfoncé, la résistance obtient une différence de tension égale à VCC, et un courant I circule :
J’AI = VCC / R
= 5 / 20 000 = 0,25 mA
Correspondant à la puissance Pde consommer :
P = VCC2 / R
= 52 / 20 000 = 1,25 mW
Ce n’est pas beaucoup et est consommé uniquement lorsque le bouton est enfoncé. Pull-up et menu déroulant résistances ont souvent des valeurs encore plus grande, consommant ainsi moins d’énergie. Si vous n’avez pas de raisons particulières, utilisez cette pratique 20 k interne pull-up.
Polarité
Nous avons eu un menu déroulant à notre disposition, nous aurions relié la goupille à VCC au lieu de GND et lire en haut à la presse, qui est plus logique. Mais puisque nous avons un pull-up uniquement, il faudra inverser la polarité de logiciel, à l’échantillonnage de la broche.
Pour plus d’infos sur broches e/s, suivre http://www.arduino.cc/en/Tutorial/DigitalPins.
Programmation
La configuration de l’axe de l’AVR (comme entrée et avec pull-up activé) est décrite dans le code ci-dessous.
Code
––––––––––8<––––––––––
#define BUTTON_PIN 2 void setup() { ... pinMode(BUTTON_PIN, INPUT); digitalWrite(BUTTON_PIN, HIGH); // connect internal pull-up ... } void loop() { ... }
––––––––––>8––––––––––