Claviers matriciels

Claviers matriciels
Claviers matriciels

Les claviers constituent une des meilleurs voies d’interaction entre les développeurs et ses projets. On peut les utiliser pour naviguer dans les menus, introduire des mots de passe, ou contrôler des jeux et des robots.

Ces claviers sont composés de boutons répartis en files et en colonnes composant une matrice.

Comment fonctionne ce clavier?

Ils existent plusieurs claviers selon le nombre de boutons qu’ils contiennent, ils peuvent se configurer en 3×3, 3×4, 4×4…

Ils sont constitués de trois membranes superposées; celle du milieu, non conductrice, sépare deux autres membranes fabriquées en matériaux conducteurs. L’interrupteur est toujours ouvert et, en pressant un bouton, la membrane supérieure et la inférieure prennent contact laissant passer le courant.

Voici le schéma de connexions d’un clavier matriciel 4×4:

Schéma de connexions d'un clavier matriciel 4x4

Nous pouvons vérifier que les touches sont distribuées en files et en colonnes et que pour détecter la pression d’un bouton on doit connaître sa position (X,Y). Par exemple, pour la touche 5, la position correspond à la file 2 et colonne 2: (2,2).

Configuration d' un clavier matriciel pour Arduino

Connexion avec Arduino.

On connecte les broches du clavier aux pins digitaux d’ Arduino:

Connexion du clavier matriciel avec les pins digitaux d'Arduino.

Code:

Sans utiliser de bibliothèque:

byte pinsFiles[] = {11,10,9,8}; 
byte pinsColonnes[] = {7,6,5,4};
const byte nombreFiles = 4;
const byte nombreColonnes = 4;
char boutons[4][4] = {{'1','2','3','A'}, 
                     {'4','5','6','B'}, 
                     {'7','8','9','C'}, 
                     {'*','0','#','D'}};
void setup(){
  for (int nF = 0; nF < nombreFiles; nF++) {
     pinMode(pinsFiles[nF], OUTPUT);
     digitalWrite(pinsFiles[nF], HIGH);
  }

  for (int nC = 0; nC < nombreColonnes; nC++) {
     pinMode(pinsColonnes[nC], INPUT_PULLUP);
  } 
   
  Serial.begin(9600);
  Serial.println("Clavier 4x4");
  Serial.println();
}
 
void loop(){
    for (int nF = 0; nF < nombreFiles; nF++){
      digitalWrite(pinsFiles[nF], LOW);
      for (int nC = 0; nC < nombreColonnes; nC++) {
        if (digitalRead(pinsColonnes[nC]) == LOW){
          Serial.print("Bouton: ");
          Serial.println(boutons[nF][nC]);
          while(digitalRead(pinsColonnes[nC]) == LOW){}
        }
      }
      digitalWrite(pinsFiles[nF], HIGH);
    }
   delay(10);
}

Code utilisant la bibliothèque Keypad.h:

#include <Keypad.h>
 
const byte files = 4;
const byte colonnes = 4;
 
char boutons[files][colonnes] = {
   { '1','2','3', 'A' },
   { '4','5','6', 'B' },
   { '7','8','9', 'C' },
   { '#','0','*', 'D' }
};
 
const byte pinsFiles[files] = { 11, 10, 9, 8 };
const byte pinsColonnes[colonnes] = { 7, 6, 5, 4 };
 
Keypad clavier = Keypad(makeKeymap(boutons), pinsFiles, pinsColonnes, files, colonnes);
 
void setup() {
   Serial.begin(9600);
   Serial.println("Clavier 4x4");
   Serial.println();
}
 
void loop() {
   char touche = clavier.getKey();
 
   if (touche) {
      Serial.print("Touche: ");
      Serial.println(touche);
   }
}
Articles similaires
Laisser un commentaire