Detecting Multiple Button Clicks in an Arduino Sketch | Bouton-poussoir et DEL avec une seule broche entrée/sortie |
Le Sonoff SV possède un connecteur à 9 broches qui fournit des connexions à trois broches d'entrée/sortie du ESP8266, à la masse (x3) et à Vcc (3,3V) (x3). Par rapport à un Sonoff Basic, l’accès à trois broches GPIO est une grande amélioration, mais c’est moins que nécessaire pour un projet de ferme-porte de garage automatique. Une des broches GPIO doit donc jouer un double rôle: contrôler une diode électroluminescente (DEL) et lire un bouton-poussoir normalement ouvert.
Le bouton-poussoir sera utilisé pour désactiver ou activer la fermeture automatique de la porte de garage. La DEL rouge est allumée lorsque la fonction automatique est désactivée.
Voici comment j'ai connecté le bouton-poussoir, la DEL et une résistance de limitation de courant.
Le premier schéma en haut à gauche montre le circuit dans son état habituel. La broche d'entrée/sortie (E/S) est en mode de sortie et définie sur LOW (valeur binaire 0). Puisque la même tension de 0 volt est appliquée à l'anode et la cathode de la DEL, elle est éteinte. Dans le diagramme à droite, le voyant est allumé en réglant la broche de sortie sur HIGH (valeur binaire 1). Le commutateur étant normalement ouvert, il n’a aucun effet dans les deux cas. La broche E/S est réglée sur le mode d’entrée pour lire l’état du bouton-poussoir. Quand il n'est pas activé (ce qui sera presque toujours le cas), le voyant s’éteindra. Cependant, ce sera d'une durée très courte. De plus, le temps entre les vérifications est relativement long, de sorte que visuellement, il ne sera pas évident que le voyant s’éteigne lors de la vérification de l’état du bouton-poussoir. Dans les rares cas où le bouton-poussoir est activé, le voyant s'allume, mais cela devrait être considéré comme un retour visuel.
Il n’était pas difficile de modifier ma bibliothèque Arduino pour bouton-poussoir d’origine (Detecting Multiple Button Clicks in an Arduino Sketch en anglais) pour gérer le voyant. Voici le fichier d'en-tête de la nouvelle bibliothèque.
mdButton
. La bibliothèque décrite
ci-dessous ne doit être utilisée que dans les cas où la routine
isButtonPressed_
de la nouvelle bibliothèque ne fonctionne pas
correctement. Le constructeur contient un nouveau paramètre qui correspond à l'état de
la DEL lors de la création de l'objet buttonLed
. La fonction
d'état du bouton est renommée buttonStatus()
et une nouvelle
fonction, appelée ledStatus
, renvoie vrai (true) si le
voyant est allumé et faux (false) sinon. La fonction setLed
permet
d'allumer ou d'éteindre la DEL indépendamment de l'état du bouton-poussoir.
Il existe un nouveau paramètre de temps qui
correspond à l'intervalle en millisecondes entre les tests successifs de
l'état du bouton. Il peut être défini avec la fonction setCheckInterval
. La
bibliothèque peut également gérer des boutons-poussoirs normalement ouverts
qui sont branchés sur la masse plutôt que la tension.
Lors d'une telle utilisation de la DEL et du bouton-poussoir, il est nécessaire d'activer la résistance de rappel sur la broche d'entrée lors de sa mise en mode d'entrée. Sinon, la valeur lue sera probablement 0, comme si le bouton était enfoncé.
Pour obtenir environ 1,8 volt avec un courant prudent de 15 milliampères sur la DEL, une résistance de 100 ohms doit être utilisée en série si la source d'alimentation est de 3,3 volts. Il existe de nombreux sites Web pour réaliser le calcul de la valeur de la résistance de limitation de courant dont ledcacl.com, ledcalculator.net. Si ces composants se trouvent au bout d’un long câble les reliant au Sonoff SV, il serait peut-être de mise de mesurer la tension d'alimentation au niveau de la DEL afin de prendre en compte la résistance du fil. Enfin, le schéma à droite me rappelle quelle broche est l’anode, ce que j’oublie toujours. La bibliothèque peut être téléchargée ici : mdButtonLed.zip.