Bonsoir ,
Le principe de l'anti-rebond par tempo (SLEEP) n'est valabe que si l'on a qu'un seul bouton à surveiller .
Si plusieurs boutons , ça devient ingérable car le programme devient trop lent .
J'ai fait de l'automatisme et je sais que le traitement automate doit se faire sans entrave de temps pour les autres boutons (entrées).
De plus , pour répondre au problème de l'auteur du topic , il veut capturer l'instant furtif de relâcher .
D'où ma façon de faire :
On lit le bit GPIO et on le place , sans a priori , à la suite dans un Registre à décalage .
Les bits sont alors décalés vers la gauche pour laisser place , à droite , au bit GPIO lu .
On peut de cette façon avoir sous la mains , les 4 états d'un contact :
Bas , Appuis (Front montant) , Haut et relâché (Front descendant) .
Code : Tout sélectionner
>>> tableau (2)
Dec , Binaire , Etat
0 , 0 , OFF
1 , 1 , Front Montant (appuis)
2 , 10 , Front Descendant (relâché)
3 , 11 , ON
>>>
Cycle du Registre à 2 bits : 0, 1, 3, 2, 0, etc
en ajoutant plus de bits dans ce registre , on peut détecter les rebonds (pour des entrées pouvant être parasitées ) et décider de quoi faire .
Code : Tout sélectionner
>>> tableau (3)
Dec , Binaire , Etat
0 , 0 , OFF
1 , 1 , OFF
2 , 10 , Rebond D
3 , 11 , Front Montant (appuis)
4 , 100 , Front Descendant (relâché)
5 , 101 , Rebond M
6 , 110 , ON
7 , 111 , ON
Cycle du registre à 3 bits : 0, 1, 3, 7, 6, 4, 0, etc
Toute autre valeur doit être considérée comme Rebond et aitre traitée dans la foulée .
Code : Tout sélectionner
>>> tableau (4)
Dec , Binaire , Etat
0 , 0 , OFF
1 , 1 , OFF
2 , 10 , Rebond D
3 , 11 , OFF
4 , 100 , Rebond D
5 , 101 , Rebond D
6 , 110 , Rebond D
7 , 111 , Front Montant (appuis)
8 , 1000 , Front Descendant (ralâché)
9 , 1001 , Rebond M
10 , 1010 , Rebond M
11 , 1011 , Rebond M
12 , 1100 , ON
13 , 1101 , Rebond M
14 , 1110 , ON
15 , 1111 , ON
>>>
Cycle du registre à 4 bits : 0, 1, 3, 7, 15, 14, 12, 8, 0, etc
Toute autre valeur doit être considérée comme Rebond et aitre traitée dans la foulée .
Le test relâcher peut être alors affecté à une fonction spécifique telle que celle-ci :
Code : Tout sélectionner
def Relache (mot , long=3):
D = 2**(Long-1)
if mot == D :
return True
else :
return False
mot = Le mot binaire stocké , long de 2 , 3 ou 4 bits .
long = longueur du mot qui permet de déterminer la position du moment Relâché .
J'aurais pu tout aussi bien mettre la valeur correspondant au moment "Relâcher" , mais ce n'est pas évolutif si l'on change de tableau .
Oui , je met du code , mais je ne suis pas un spécialiste .
Ça peut éveiller certains ... bien souvent , quand on aborde les calculs , surtout les Racines carré , puissances , fractions et autres , il ne reste plus grand monde .
Je n'ai pourtant pas été bon élève , encore moins un matheux