Étape 5: Quelles touches ont été enfoncées ?
Les gens ont été confrontés à ce problème dans le passé, et une solution commune est la matrice d’analyse. L’idée clée est que nous voulons connaître les principaux États (haut/bas), mais nous n’avez pas besoin de les connaître à l’instant même. En analysant les touches au fil du temps (quoique très rapidement sur le plan humain), nous pouvons réduire la quantité de matériel, que nous avons besoin.
Dans notre cas, nous avons organisé les touches 7 colonnes (notes clés blanches) et de 4 rangs (octaves). Nous balayer les colonnes (notes) un à un moment et voir lequel de ces notes sont actifs dans les octaves. Après avoir fait 7 scans (pour chaque billet), nous saurons l’État pour chacun des 28 touches. Nous spécifions la note pour numériser à l’aide de 3 sorties (8 possibilités - nous devons seulement 7 notes) et 4 entrées (4 octaves). Nous avons besoin des 7 fils pour les notes et 4 fils pour les octaves. Nous pouvons résoudre le problème à l’aide de 11 fils et 7 broches de IO. Il s’agit d’une grande amélioration.
Il y a quelques détails :
* Clé fantôme: À cause de la matrice de nature de la clé de câblage, il est possible pour plusieurs presses de touches être interprété à tort comme l’appui d’une touche qui n’est pas pressée. En ajoutant une diode à chaque commutateur nous prévenir actuels de refluer dans la matrice et empêcher cela.
* Colonne/Note sélection : Il suffit de sélectionner la 1 note à la fois (sur 7) et nous sommes courts sur les broches e/s, le meilleur moyen de gérer cela est donc d’utiliser un décodeur de 3,8. Nous avons utilisé un 74LS138. Qui dispose d’une sortie basse active, alors le circuit est peut-être moins intuitive que d’avoir un + 5V sortie de conduit.
* Circuit d’entrée : Les entrées sur l’atmega328p peuvent être configurées pour avoir l’arrachage des résistances. Bien. Il nous évite d’avoir à leur fils nous-mêmes.
* Clé De rebondir : Clés mécaniques ne pas ouvrir ou fermer proprement. Ils rebondissent rapidement entre États ouverts et fermés sur une relativement longue période (miiliseconds). Nous avons résolu ce problème en filtrant les événements clés dans le logiciel. Mettez simplement nous ne reconnaissons pas une touche haut/bas événement jusqu'à ce que cet État a persisté sur l’interrupteur pour un certain nombre d’analyses. Nous pouvons capter ce nombre vers le haut ou vers le bas pour faire la touche moins ou plus "délicat".
Ressources :
Une discussion intéressante de numérisation clé et clée vitesse télédétection commerciale claviers.
http://www.openmusiclabs.com/Learning/Digital/Input-Matrix-Scanning/Keyboard/
Grand Piano Firmware. Matrice pilote de clavier.
https://github.com/Deadsy/bigpiano/BLOB/Master/SRC/Key.cpp
https://github.com/Deadsy/bigpiano/BLOB/Master/SRC/Key.h