Voici le produit. Je comprends l'idée: ces 16 boutons utilisent une matrice 4x4. 4 lignes pour les lignes, 4 lignes pour les colonnes, et nous avons 8 câbles.
Mais:
Comment cela peut-il fonctionner sans multiplexeur?
Cela peut-il détecter avec précision les pressions sur plusieurs boutons? Même si les boutons utilisent la même ligne ou la même colonne? Exemple: boutons en position (2,2) (2,3), (3,2) et (3,3) enfoncés en même temps.
Comment ça marche?
Réponses:
Ce n'est pas le cas. La carte du clavier semble avoir seulement des commutateurs, avec peut-être quelques diodes que nous ne pouvons pas voir. Cependant, la carte de gauche semble avoir un processeur. Le multiplexage se fait presque certainement dans le micrologiciel.
L'algorithme de multiplexage fonctionne comme ceci:
Le processus ci-dessus est répété assez rapidement pour que tous les boutons soient vérifiés dans un délai qui semble toujours instantané pour un observateur humain. La limite humaine de «instantané» dans ce contexte est d'environ 50 ms. Même un microcontrôleur bas de gamme peut scanner un clavier 4x4 en beaucoup moins de temps que cela.
Probablement oui. Une façon consiste à mettre une diode en série avec chaque bouton. Celles-ci pourraient être sur le côté inférieur du tableau que vous montrez. Avec les diodes, l'algorithme décrit ci-dessus fonctionne juste.
Une autre façon consiste à mettre les résistances en série avec les lignes et à mesurer leur tension analogique. Même lorsque plusieurs boutons raccourcissent plusieurs lignes / colonnes, vous pouvez éventuellement déterminer les boutons sur lesquels vous appuyez. Cela nécessite des entrées A / N dans le micro, pas seulement des entrées numériques comme lorsque des diodes sont utilisées.
la source
Sans diodes ... vous obtiendrez des rectangles fantômes.
Par exemple dans votre exemple (2,2) (2,3), (3,2) et (3,3); vous avez choisi un exemple ironique en choisissant un rectangle. Si vous réellement appuyez sur les quatre, cela fonctionnera. Mais si vous appuyez sur les trois coins du rectangle, le quatrième coin semble également être pressé, même si ce n'est pas le cas.
Ce clavier est clairement destiné à la saisie de données au clavier, où la convention utilisateur est une touche à la fois. Vous remarquez qu'il n'y a pas de touches «shift» sur un clavier de saisie de carte de crédit de station-service, par exemple.
Cependant, si vous avez fait de S1 une touche Maj, et S3 une touche Alt-Maj de sorte que les utilisateurs puissent raisonnablement maintenir les deux tout en appuyant également sur S13, alors S15 semble également être enfoncé.
la source
Voici comment procéder sans scan continu:
la source
Je l'ai fait avec Assembly Language sur des microcontrôleurs Atmel AVR nus.
Pour plus de simplicité: Rangées de clavier: utilisez les broches Arduino 4, 5, 6 et 7 (broches AVR PD4, PD5, PD6 et PD7) Colonnes du clavier: utilisez les broches Arduino 8, 9, 10 et 11 (broches AVR PB0, PB1, PB2 et PB3 ) Effectuez des entrées de broches de ligne avec des tractions activées. Créez des broches de colonne et émettez-leur des zéros. Activez les interruptions de changement de broche sur toutes les broches de ligne et de colonne. http://playground.arduino.cc/Main/PinChangeInterrupt Appuyez sur un bouton du clavier pour tirer une broche de rangée vers le bas. La routine d'interruption doit lire les broches de la ligne et trouver la broche la plus basse. Les 4 bits supérieurs doivent être trois uns et un zéro. Si vous utilisez une variable uint8_t 8 bits, vous pouvez la diviser par 16 ou (var >> 4) pour mettre les 4 bits dans les bits inférieurs du nombre. Vous pouvez utiliser un OR au niveau du bit | opération avec 240 pour régler les 4 bits supérieurs à 1 et une opération NOT ~ au niveau du bit pour inverser tous les bits afin que vous n'ayez qu'un seul jeu de bits représentant la ligne sur laquelle la touche a été activée. Enregistrez ce nombre sous la forme 0, 1, 2 ou 3.
Changez la configuration des broches:
Faire des entrées de broches de colonne avec pull-ups activés. Créez des épingles de ligne et émettez-leur des zéros. Lisez les broches de la colonne et trouvez quelle broche est basse. Faites une manipulation similaire avec cette valeur, sauf que vous n'avez pas à déplacer le nombre vers la droite. Après les var ^ 240 et ^ var, vous avez un seul bit pour représenter la colonne sur laquelle la touche était enfoncée. N'oubliez pas de désactiver les interruptions avant de reconfigurer les ports car cela déclenchera probablement des interruptions indésirables. Vous devrez peut-être effacer les indicateurs d'interruption lorsque vous quittez la routine d'interruption pour éviter la gestion des doublons d'interruption.
la source