Bonjour ,
Le contact électrique d'un bouton à 2 états que l'on peut stocker sur un seul bit , valeur 0 ou 1 (False ou True)
Pour gérer les changements d'état , il faut créer 2 position en plus , soit 4 états , en travaillant sur un "Registre" à 2 bits .
Soit :
- Bouton = 0b00 # stable non actionné = 0
- Bouton = 0b01 # bascule
- Bouton = 0b10 # bascule
- Bouton = 0b11 # stable actionné = 1
Définir une fonction pour intégrer le bit GPIO dans le Registre , par la droite (ou par la gauche => à coder):
Variable : Bouton1 = 0
Syntaxe : Bouton1 = Registre (GPIO , Bouton1)
Code : Tout sélectionner
def Registre (bit , mot):
mot <<= 1 # décale les bits d'un rang vers la gauche
mot += bit # ajoute le bit à droite
mot %= 4 # Modulo 4 , reste de division limitant les valeurs de 0 à 3 (0b00 à 0b11)
return mot # retourne la nouvelle valeur du bouton
On obtient alors les états suivants :
- Bouton = 0b00 # stable non actionné =Niveau Bas
- Bouton = 0b01 # bascule appuis = Front Montant
- Bouton = 0b10 # bascule relâché = Front Descendant
- Bouton = 0b11 # stable actionné = Niveau Haut
Le cycle de fonctionnement est le suivant :
- Bouton = 0b00 # stable non actionné = Bas
- Bouton = 0b01 # bascule appuis = Front Montant
- Bouton = 0b11 # stable actionné = Haut
- Bouton = 0b10 # bascule relâché = Front Descendant
- Bouton = 0b00 # stable non actionné = Bas
- Bouton = 0b01 # bascule appuis = Front Montant
- Bouton = 0b11 # stable actionné = Haut
- Bouton = 0b10 # bascule relâché = Front Descendant
etc ...
Les bits se décalant à chaque intégration vers la gauche pour laisse place au nouveau bit venu .
Il ne reste plus qu'à tester la valeur du registre :
Code : Tout sélectionner
if Bouton1 == 0b00 :
print ('Etat 0"')
if Bouton1 == 0b01 :
print ('Front montant')
if Bouton1 == 0b11 :
print ('Etat 1"')
If Bouton1 == 0b10 :
print ('Front descendant')
Il est possible d'intégrer une fonction Anti-Rebond , si la lecture du bouton est trop rapide , en utilisant tout simplement un registre plus long (sur 3 bits).
Il faut définir alors les nouvelles valeurs avec la même fonction (insersion de bit à droite):
- Bouton = 0b000 # stable non actionné =
Niveau Bas
- Bouton = 0b001 # 1er lecture front montant
- Bouton = 0b011 # 2eme lecture front montant validée =
Front montant
- Bouton = 0b111 # stable actionné =
Niveau Haut
- Bouton = 0b110 # 1er lecture front descendant
- Bouton = 0b100 # 2eme lecture front descendant validée =
Front descendant
et gérer les rebonds :
- Bouton = 0b101 # 2eme lecture front descendant = rebond détecté => retourner la valeur bouton à 0b111 ou 0b010
- Bouton = 0b010 # 2eme lecture front montant = rebond détecter => retourner la valeur bouton à 0b000 ou 0b001