Retour Suite
sylvainmahe.site LE SITE de Sylvain Mahé contact@sylvainmahe.site
Article : Sylvain Mahé contact@sylvainmahe.site Lire l'état d'un bouton avec GpioRead.h La classe GpioRead.h permet de lire l'état 0 ou 1 (0V ou +5V) d'un ou plusieurs ports de l'automate programmable avec la possibilité d'utiliser une résistance de rappel interne au microcontrôleur, et d'avoir un système anti-rebonds bien pratique pour filtrer les rebonds et autres parasites provoquées par les boutons et interrupteurs. Gpio (pour "General Purpose Input/Output" ou entrée/sortie pour un usage général) est le nom que l'on donne aux ports d'entrée/sortie génériques (c'est-à-dire sans fonctions particulières) principalement dans le monde des microcontrôleurs. Exemple d'utilisation de GpioRead.h : #include <GpioRead.h> int main() { GpioRead myButton = GpioRead (1, true, 10); while (true) { myButton.read(); if (myButton.monostable == true) { //allumer une del (état momentané) } if (myButton.bistable == true) { //allumer une del (état continu) } else { //éteindre une del (état continu) } } return 0; } Dans cet exemple, un objet myButton de type GpioRead est déclaré :
- Le 1er paramètre indique l'utilisation du port numéro 1 de l'automate programmable en entrée.
- Le 2ème paramètre true permet d'utiliser une résistance de rappel interne.
Attention, ne connectez pas un bouton sans résistance de rappel externe à un port de l'automate programmable sans avoir au préalable défini ce paramètre sur vrai afin d'utiliser une résistance de rappel interne, dans le cas contraire vous risquez de griller le microcontrôleur ! - Le 3ème paramètre 10 est le temps en millisecondes pour filtrer les rebonds. A noter que 10ms est une valeur qui fonctionne bien pour filtrer la plupart des boutons. Plus votre bouton ou interrupteur sera d'une qualité médiocre, plus il faudra augmenter cette valeur. Plus loin cet objet myButton appelle la fonction read dans une boucle ce qui permet de lire l'état du port concerné. Cet état 0 ou 1 est stocké dans deux variables, monostable et bistable :
- monostable signifie que si le bouton est appuyé, la variable renvoie vrai au premier appel à la fonction state, mais qu'elle renvoie faux aux appels suivants (aux tours de boucle suivants généralement), en attendant que le bouton soit relâché puis par la suite de nouveau appuyé.
- bistable signifie que tant que le bouton est appuyé, cette variable renvoie vrai.
Cet état monostable (momentané) permet d'appeler des blocs de code une seule fois lorsqu'un bouton est pressé (sans être relâché immédiatement), c'est un évènement monostable (en opposition à un événement bistable ou astable), cela peut être utile pour réaliser par exemple des incréments de valeurs, ou bien encore des signaux sonores lorsqu'on presse des boutons, etc... Bien entendu vous pouvez utiliser cette classe pour d'autres applications (lire autre chose que des boutons ou interrupteurs). Ports des automates programmables concernés par la GPIO : Automate programmable MODULABLE 20 :
- Port 1 (PD0)
- Port 2 (PD1)
- Port 3 (PD2)
- Port 4 (PD3)
- Port 5 (PD4)
- Port 6 (PD5)
- Port 7 (PD6)
- Port 8 (PD7)
- Port 9 (PB0)
- Port 10 (PB1)
- Port 11 (PB2)
- Port 12 (PB3)
- Port 13 (PB4)
- Port 14 (PB5)
- Port 15 (PC0)
- Port 16 (PC1)
- Port 17 (PC2)
- Port 18 (PC3)
- Port 19 (PC4)
- Port 20 (PC5)

Automate programmable MODULABLE 32 :
- Port 1 (PB0)
- Port 2 (PB1)
- Port 3 (PB2)
- Port 4 (PB3)
- Port 5 (PB4)
- Port 6 (PB5)
- Port 7 (PB6)
- Port 8 (PB7)
- Port 9 (PD0)
- Port 10 (PD1)
- Port 11 (PD2)
- Port 12 (PD3)
- Port 13 (PD4)
- Port 14 (PD5)
- Port 15 (PD6)
- Port 16 (PD7)
- Port 17 (PC0)
- Port 18 (PC1)
- Port 19 (PC2)
- Port 20 (PC3)
- Port 21 (PC4)
- Port 22 (PC5)
- Port 23 (PC6)
- Port 24 (PC7)
- Port 25 (PA7)
- Port 26 (PA6)
- Port 27 (PA5)
- Port 28 (PA4)
- Port 29 (PA3)
- Port 30 (PA2)
- Port 31 (PA1)
- Port 32 (PA0)
Récapitulatif des fonctions et variables de cette classe : bool monostable = false; bool bistable = false; GpioRead (const unsigned char PIN, const bool PULL_UP_INTERNAL, const unsigned char DEBOUNCING); void read();