Sylvain Mahé Le site Web Retour à l'accueil Principes Partager mes idées et mes projets librement et gratuitement. Thématiques Mécatronique du système embarqué, artisanat pluridisciplinaire, bricolage commun, esthétique logicielle et matérielle, minimalisme fonctionnel, conceptualisation alternative, rédaction technique et littéraire, partage pédagogique documenté. Contact ✆ Téléphone : 06.45.49.96.98
✉ E-mail : contact@sylvainmahe.site
✎ Site Web : sylvainmahe.site
Écriture de la page : Sylvain Mahé
Lire l'état d'un bouton avec la classe GpioRead La classe GpioRead permet de lire l'état 0 ou 1 (0V ou +5V) d'un ou plusieurs ports GPIO 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 la classe GpioRead : #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 GPIO 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.
La résistance de rappel interne (ou externe) est importante car elle permet de fixer la tension et donc l'état 0 ou 1 du port du microcontrôleur. Comprendre que si le bouton connecté à ce port est ouvert et n'utilise pas de résistance de rappel, la broche du microcontrôleur est dans ce cas laissée en l'air, et est sujette à capter le bruit électromagnétique environnant, ce qui correspond à un état indéfini (ce qui n'est pas souhaité). - 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 GPIO concerné. Cet état 0 ou 1 est stocké dans deux variables, monostable et bistable :
- monostable signifie que si le bouton est appuyé, la variable est égale à vrai au premier appel à la fonction read, mais qu'elle est égale à 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 est égale à 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 GPIO 1 (PD0)
- Port GPIO 2 (PD1)
- Port GPIO 3 (PD2)
- Port GPIO 4 (PD3)
- Port GPIO 5 (PD4)
- Port GPIO 6 (PD5)
- Port GPIO 7 (PD6)
- Port GPIO 8 (PD7)
- Port GPIO 9 (PB0)
- Port GPIO 10 (PB1)
- Port GPIO 11 (PB2)
- Port GPIO 12 (PB3)
- Port GPIO 13 (PB4)
- Port GPIO 14 (PB5)
- Port GPIO 15 (PC0)
- Port GPIO 16 (PC1)
- Port GPIO 17 (PC2)
- Port GPIO 18 (PC3)
- Port GPIO 19 (PC4)
- Port GPIO 20 (PC5)

Automate programmable MODULABLE 32 :
- Port GPIO 1 (PB0)
- Port GPIO 2 (PB1)
- Port GPIO 3 (PB2)
- Port GPIO 4 (PB3)
- Port GPIO 5 (PB4)
- Port GPIO 6 (PB5)
- Port GPIO 7 (PB6)
- Port GPIO 8 (PB7)
- Port GPIO 9 (PD0)
- Port GPIO 10 (PD1)
- Port GPIO 11 (PD2)
- Port GPIO 12 (PD3)
- Port GPIO 13 (PD4)
- Port GPIO 14 (PD5)
- Port GPIO 15 (PD6)
- Port GPIO 16 (PD7)
- Port GPIO 17 (PC0)
- Port GPIO 18 (PC1)
- Port GPIO 19 (PC2)
- Port GPIO 20 (PC3)
- Port GPIO 21 (PC4)
- Port GPIO 22 (PC5)
- Port GPIO 23 (PC6)
- Port GPIO 24 (PC7)
- Port GPIO 25 (PA7)
- Port GPIO 26 (PA6)
- Port GPIO 27 (PA5)
- Port GPIO 28 (PA4)
- Port GPIO 29 (PA3)
- Port GPIO 30 (PA2)
- Port GPIO 31 (PA1)
- Port GPIO 32 (PA0)
Références : 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();