Au niveau matériel la routine anti-rebond de base doit prendre en compte les segments suivants d'un comportement de clé physique (ou du commutateur):
clés assis tranquillement:> doigt touche la touche et commence à pousser aval> biefs clés Le doigt commence à relâcher la touche et le ressort appuie sur la touche. Le doigt et la clé vibrent un peu jusqu'à ce qu'il se mette à
Toutes ces étapes impliquent 2 raclages et frottements de métal et se bousculer les uns les autres, faisant varier la tension de 0 à maximum sur des périodes de millisecondes, donc il y a du bruit électrique à chaque étape:
(1) Bruit lorsque la clé n'est pas touchée, causée par des problèmes environnementaux tels que l'humidité, les vibrations, les changements de température, etc.provoquant des changements de tension dans les contacts principaux
(2) le bruit provoqué que la touche est pressée vers le bas
(3) de bruit en tant que la touche est maintenue enfoncée
(4) de bruit en tant que la clé est être libéré
(5) le bruit que les clés vibre après avoir été libéré
est ici l'algorithme par lequel on devine essentiellement que la touche est pressée par une personne:
lire l'état de la clé, qui peut être "peut être pressé", "est définitivement pressé", "n'est pas pressé", "ne peut pas être pressé"
boucle lorsque la touche "peut être" enfoncée (s'il s'agit de matériel, il s'agit d'un échantillon de tension supérieur à une certaine valeur de seuil), jusqu'à ce qu'il soit "not not not" (inférieur à la tension de seuil) (initialisation en attente de bruit) quiesce, définition de « peut-être » et « certainement pas » dépend de l'application spécifique)
boucle
alors que la clé est « certainement pas » enfoncé jusqu'à ce que la touche « pourrait être » pressé
lorsque la touche "pourrait être" enfoncée, commencer à boucler et échantillonner l'état de la touche, et garder la trace de la durée pendant laquelle la touche "pourrait être" - si la clé remonte à "peut-être pas" ou "appuyez sur l'état avant un certain laps de temps, redémarrez la procédure - à un certain temps (nombre de millisecondes) que vous avez choisi (généralement en expérimentant avec différentes valeurs) vous décidez que la valeur de l'échantillon n'est plus causée par le bruit, mais est très probablement causé par la clé effectivement tenue par un doigt humain et vous retournez la valeur « pressé »
while(keyvalue = maybepressed){
//loop - wait for transition to notpressed
sample keyvalue here;
maybe require it to be "notpressed" a number of times before you assume
it's really notpressed;
}
while(keyvalue = notpressed){
//loop - wait for transition to maybepressed
sample keyvalue
again, maybe require a "maybepressed" value a number of times before you
transition
}
while(keyvalue=maybepressed){
presstime+=1;
if presstime>required_presstime return pressed_affirmative
}
}
return pressed_negative
en fait, il trouve environ 10 minutes après avoir posé la question. Tout à fait pratique. Je suis d'accord avec la solution HW ... si seulement ... – Benoit
@Benoit: Bon, marquez-moi répondre! ;) – GEOCHET