Matrice carrée poly
La lecture d'une matrice carrée simple donne une erreur de lecture possible si au moins trois boutons situés sur trois coins d'un rectangle sont pressés. Dans le schéma ci dessous, les boutons 1, 2 et 5 sont pressés. Ils sont sur le rectangle (1, 2, 4, 5).
Si on veut savoir si le bouton 4 est appuyé, on peut mettre L2 à LOW et lire la colonne C1. On aimerait bien lire un état HIGH, qui indiquerait que le bouton n'est pas appuyé, mais un courant (en rouge sur le schéma) peut passer et on lira LOW.
Pour éviter les chemins parasites, il suffit de mettre une diode en série avec le bouton 2. Comme la matrice est régulière, symétrique... il faudra mettre des diodes en série avec tous les boutons. Cela donne:
Pour lire un bouton, on commence par mettre toutes les broches en INPUT_PULLUP. Cette matrice peut être lue soit en sélectionnant ligne par ligne soit colonne par colonne. Avec le câblage ci dessus, pour lire un bouton, on place la ligne du bouton en OUTPUT à LOW et la colonne à LOW indique que le bouton est appuyé. Si on veut lire la matrice dans l'autre sens (mettre les colonnes en OUTPUT à LOW les unes après les autres, il faut inverser le sens des diodes.
Y a-t-il une touche appuyée?
Tout ce qui a été dit pour la détection d'une touche appuyée pour la Matrice carrée reste d'actualité. Il faut toutefois faire attention au sens des diodes.
Poly?
La lecture de cette matrice est poly. C'est son unique intérêt. Mais le code est un peu plus compliqué car on ne peut plus retourner le nom du bouton, il faut retourner un tableau de booléen donnant les états de tous les boutons (les booléens en question peuvent être les bits d'un mot de 16 bits si on n'a que 16 boutons). Si on ne veut pas donner l'état de tous les boutons, mais d'un seul, on utilise une matrice carrée simple et on économise les N diodes!
Pour la lecture, le programme est le même que l'on ait les diodes ou pas. Le programme décrit dans la page Matrice carrée est donc encore d'actualité.
J'ai vu plein de claviers matriciels pré-câblés pour une lecture mono (ou stéréo), mais je n'en ai pas vu pour une lecture poly.
Bilan
- lecture poly
- plus de boutons que si on met 1 bouton par broche!
- la bibliothèque Keypad devrait gérer les claviers carrés poly, mais avec 10 appuis maxi par défaut
- algorithme de lecture classique
- utilisation d'interruption possible
MAIS
- autant de boutons que la matrice carrée simple
- il faut rajouter des diodes
- on ne trouve pas à ma connaissance des claviers 4x3 ou 4x4 déjà câblés avec les diodes
Ce montage est intéressant si on a beaucoup de boutons et que l'on veut une lecture poly. Très utilisé dans les claviers musicaux.