Tu écris le code, tout compile, le bouton devrait faire quelque chose — mais rien. Ou pire : le bouton se déclenche tout seul sans que tu le touches. Les variables sautent aléatoirement de 0 à 1. Le code semble fou, mais le code n'est pas le problème.

Une entrée flottante, voilà le problème. Et tu le règles avec deux centimes de résistances.

Qu'est-ce qu'une entrée flottante ?

Une entrée numérique lit haut ou bas. Mais si elle n'est connectée nulle part solidement — ni à l'alimentation, ni à la masse — elle flotte. Elle capte aléatoirement des perturbations de l'environnement : bruit électromagnétique, couplage capacitif avec d'autres signaux, même ta main qui approche. Le résultat est un comportement imprévisible qui n'a rien à voir avec ton code.

Pull-up : haut par défaut, bas sur action

Une résistance pull-up connecte l'entrée via une résistance à la tension d'alimentation. Sans action, l'entrée lit haut. Si tu appuies sur un bouton qui tire l'entrée vers la masse, le signal passe bas.

C'est le montage le plus utilisé pour les boutons sur microcontrôleurs. La logique est inversée — pressé = LOW, relâché = HIGH — mais on s'y habitue vite et c'est le schéma standard dans le code Arduino avec INPUT_PULLUP.

Pull-down : bas par défaut, haut sur action

Une résistance pull-down connecte l'entrée via une résistance à la masse. Sans action, l'entrée lit bas. Si tu connectes l'entrée à l'alimentation — via un bouton ou un capteur — le signal passe haut. La logique est directe : actif = HIGH.

Bureau calme avec cahier ouvert montrant un montage pull-up et breadboard avec bouton-poussoir

Quelle valeur choisir ?

10 kΩ est un point de départ courant pour un bouton simple, mais ce n'est pas une valeur universelle. Consultez la fiche technique de l'entrée et tenez compte du courant de fuite, des seuils HIGH et LOW valides, de la consommation, du câblage, des perturbations et de la vitesse de transition requise. Une résistance plus faible impose plus fortement le niveau, mais consomme davantage lorsque le signal est actif. Une résistance plus élevée consomme moins, mais peut être plus sensible aux fuites et aux parasites.

I2C utilise des pull-up sur SDA et SCL. Ne les choisissez pas seulement selon la vitesse du bus : la tension logique, la capacité totale du bus, le temps de montée autorisé, le courant absorbable par les appareils et les pull-up déjà présentes sur les modules déterminent ensemble la plage utile. Suivez la spécification I2C et les fiches techniques des appareils utilisés.

Faut-il une pull-up, et mon module en possède-t-il déjà une ?

Utilisez une pull-up ou pull-down lorsqu'une entrée numérique pourrait sinon flotter pendant le fonctionnement, le démarrage ou le reset. Si une autre sortie impose toujours un niveau HIGH ou LOW, une résistance supplémentaire n'est pas automatiquement nécessaire ; la fiche technique et l'état au démarrage restent déterminants.

Sur un bus I2C, SDA et SCL doivent pouvoir revenir au niveau HIGH grâce à des pull-up. Certains modules d'extension les intègrent, d'autres non. Les pull-up de plusieurs modules se retrouvent en parallèle et peuvent donc réduire la résistance totale. Vérifiez le schéma ou mesurez le module, comptez les résistances déjà présentes, puis choisissez la valeur externe selon la tension, le courant absorbable, la capacité du bus et le temps de montée autorisé. 4,7 kΩ et 10 kΩ sont des points de départ, pas des réponses universelles.

Pull-up internes

De nombreux microcontrôleurs permettent d'activer une pull-up interne. Son adéquation dépend de la carte exacte, de la broche, de l'état au démarrage ou pendant le reset, du câblage et de l'application. Vérifiez sa valeur et son comportement dans la fiche technique. L'I2C, un câblage plus long ou un environnement perturbé peuvent nécessiter une pull-up externe calculée.

Vérifier ce qui pilote l'entrée

Une entrée numérique doit recevoir un niveau valide lorsqu'aucun autre circuit ne la pilote activement. Ce niveau peut venir d'une pull-up/pull-down interne ou externe, mais parfois aussi d'une sortie logique active ou d'une fonction bus-hold dédiée. N'ajoutez donc pas 10 kΩ partout par défaut : vérifiez la fonction, la fiche technique, le câblage et l'état au démarrage et pendant le reset.

Voir les résistances, puis vérifiez la valeur, le boîtier, la tolérance et la puissance pour votre circuit.