J’ai un clavier à 12 touches qui ressemble beaucoup à celui ci, sur amazon.fr. Je fais un essai pour voir si j’arrive à en lire les touches lorsque je le connecte à un arduino Uno.
Identification des broches
le clavier présente 10 connecteurs mais il suffit de souder les 8 du milieu.
Ensuite, avec un multimètre réglé sur 2KΩ, on regarde quels fils se connectent lorsqu’on appuie sur une touche.
Numéroter les broches de 1 à 8 : de droite à gauche lorsqu’on voit le clavier.
Le clavier est matriciel : chaque touche correspond à une colonne et une ligne que j’ai numéroté arbitrairement comme dans ce schéma :
Pour savoir quelle broche est connectée à quelle colonne ou ligne, il faut déterminer quels sont les associations de broches qui entrent en contact lorsqu’on appuie sur une touche. Ainsi si j’appuie sur 1, en voyant quelles broches entrent en contact, je déterminerai que l’une des deux est « row 1 » et l’autre est « col 1 ».
J’ai déterminé que la broche 7 et la broche 4 sont connectées lorsque j’appuie sur la touche 2. J’ai continué jusqu’à ce que j’ai assez d’informations pour identifier le rôle de chaque broche.
broche | broche | touche |
7 | 4 | 2 |
7 | 3 | 5 |
7 | 2 | 8 |
7 | 1 | 0 |
8 | 1 | * |
6 | 1 | # |
1 | 1 | D |
J’en ai donc déduit que les broches correspondent à :
broche | broche |
1 | Row 4 |
2 | Row 3 |
3 | Row 2 |
4 | Row 1 |
5 | Col 4 |
6 | Col 3 |
7 | Col 2 |
8 | Col 1 |
Connexion à l’Arduino
broche | broche | arduino |
1 | Row 4 | 8 |
2 | Row 3 | 9 |
3 | Row 2 | 10 |
4 | Row 1 | 11 |
5 | Col 4 | 4 |
6 | Col 3 | 5 |
7 | Col 2 | 6 |
8 | Col 1 | 7 |
Sketch
La bibliothèque keypad.h permet de gérer facilement un tel clavier matriciel. Voir cet article sur Arduino Playground.
Ce sketch lit correctement chaque touche appuyée et l’affiche dans la console série :
#include <Keypad.h> const byte ROWS = 4; //four rows const byte COLS = 4; //four columns //define the cymbols on the buttons of the keypads char keys[ROWS][COLS] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; byte rowPins[ROWS] = {11, 10, 9, 8}; //rows 1 to 4 byte colPins[COLS] = {7, 6, 5, 4}; //columns 4 to 1 //initialize an instance of class NewKeypad Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS); void setup(){ Serial.begin(9600); Serial.println("Setup done"); }
Si j’appuie sur les touches 1, 2, 3, A, 4, 5, 6, B, 7, 8, 9, C, *, 0, # puis D, j’obtiens l’affichage suivant dans la console série.
Setup done
key : 1
key : 2
key : 3
key : A
key : 4
key : 5
key : 6
key : B
key : 7
key : 8
key : 9
key : C
key : *
key : 0
key : #
key : D
Tout fonctionne donc parfaitement.
Et maintenant ?
Si j’ai besoin d’utiliser un tel clavier sur un arduino, je sais maintenant comment faire !
void loop dans le programme