Je l’ai dit dans l’article sur les cartes Arduino, ces cartes sont dotées principalement d’entrées digitales, autrement dit pouvant lire uniquement un niveau haut (5 ou 3.3V) ou un niveau bas (0V). Cela permet de connaitre la position de l’interrupteur relié sur l’entrée, c’est-à-dire s’il est fermé (le courant passe) ou ouvert (le courant ne passe pas). La quasi totalité des commandes du pupitre repose sur ce principe : que ce soient les interrupteurs de la boite à levier, le bouton poussoir d’acquittement ou encore les positions du manipulateur de traction à cran, il s’agit à chaque fois de contacts électriques tout ou rien.
Remarque : on prendra ici 5V pour la tension de fonctionnement de l’Arduino. Si vous utilisez une Arduino Due, remplacez tous les 5V par des 3.3V !
Le problème est le suivant : comment lit-on l’état d’un interrupteur avec Arduino ?
Une première idée reçue
Tout d’abord, intéressons-nous au montage électronique à réaliser. L’objectif est d’avoir 5V sur le pin avec un interrupteur fermé et 0V avec l’interrupteur ouvert. On pourrait penser que le montage suivant est suffisant :

Or il y a un problème : lorsque l’interrupteur est fermé, le pin est bien au potentiel 5V donc tout va bien. Mais lorsqu’il est ouvert, le pin n’est relié à rien, et en électronique rien n’est pas 0V !
C’est d’ailleurs une des règles de base à comprendre lorsque l’on débute en électronique : chaque point du circuit doit toujours être à un potentiel défini par rapport à la masse (0V), et un fil dans le vide est à un potentiel inconnu.
Le montage pull-down
On va donc adopter la méthode dite du pull-down, en français « tirage à la masse ».
On modifie le circuit de la façon suivante :

De cette façon, lorsque l’interrupteur est ouvert (comme sur l’image), le pin est « tiré » à la masse par la résistance de 10kOms. On détecte bien un niveau logique bas (0V).
Lorsque l’on ferme l’interrupteur, le pin est directement relié au +5V. La résistance de 10kOms permet d’éviter un court circuit en limitant très fortement le courant qui fuit vers la masse. On détecte bien un niveau haut (5V) sur le pin.
Le code suivant permet de relier des actions à la positon de l’interrupteur (on utilise ici le pin 3). On commence par déclarer le pin comme une entrée (input), puis on teste l’état logique sur cette entrée à l’aide de la fonction digitalRead(pin) qui renvoie Vrai si le niveau en entrée est haut (5V) et Faux si le niveau est bas (0V) :
void setup(){
pinMode(3, INPUT);
}
void loop(){
if (digitalRead(3)){
//action si l'interrupteur est fermé
}
if (!digitalRead(3)){
//action si l'interrupteur est ouvert
}
}
On rappelle que le « ! » devant une expression logique en forme la négation.
Le montage pull-up
Voyons désormais une variante de ce montage appelé pull-up.

Désormais, lorsque l’interrupteur est ouvert, c’est le 5V qui est relié au pin, et la fermeture provoque la mise à la masse du pin. On a donc une inversion des niveaux haut et bas en fonction de la position de l’interrupteur. Mais pourquoi s’embêter avec cela me direz vous !
En pratique, un montage d’une extrême simplicité
La réponse est simple : parce que Arduino sait faire ce montage pull-up pour vous ! Autrement-dit, chaque pin dispose d’une résistant de tirage à 5V qui peut être activée par une simple ligne de code ! Le montage à faire est donc le suivant :

Ensuite, dans votre code Arduino, il suffit de déclarer votre pin comme un « Input pullup ». On prendra pour la suite l’exemple d’un interrupteur relié au pin 3.
void setup(){
pinMode(3, INPUT_PULLUP);
}
void loop(){
if (!digitalRead(3)){
//action si l'interrupteur est fermé
}
if (digitalRead(3)){
//action si l'interrupteur est ouvert
}
}
On notera le « ! » devant digitalRead dans le cas de l’interrupteur fermé : en effet, rappelons qu’en montage « pull-up, un niveau bas correspond à l’interrupteur fermé.
Vous savez désormais comment relier un contact tout ou rien à votre carte Arduino. C’est une première étape qui vous permettra par la suite de programmer des actions pour de nombreuses commandes de votre pupitre. Vous pouvez par exemple associer l’appui d’une touche de clavier à la fermeture d’un contact.