KeyPad

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche

Qu'est ce qu'un KeyPad

Un KeyPad est typiquement un clavier de saisie numérique, il existe sous différente forme, en clavier/membrane souple ou clavier solide (en ABS).

Le plus courant ne comporte que des chiffres (de 0 à 9 avec les caractères * et #).

Il en existe également quelques-uns peu plus évolués proposant une colonne supplémentaire pour que vous puissiez y placer vos propres fonctions.

   

Ce qui est sympathique avec les KeyPad, c'est que si vous n'avez pas besoin de la colonne complémentaire, il vous suffit simplement de l'ignorer (de ne pas la raccorder).

Principe de fonctionnement

Principe électrique

Le principe de fonctionnement d'un KeyPad est excessivement simple.

Un keypad n'est qu'une matrice de contact (de boutons). Quand un utilisateur appuie sur une touche il met une colonne en contact avec une ligne. C'est aussi simple que cela.

 

Dans le schéma ci-dessus, lorsque l'utilisateur presse:

  • la touche 9, il met en contact la ligne 3 et la colonne 3.
  • la touche B, il met en contact la ligne 2 et la colonne 4.
  • la touche 1, il met en contact la ligne 1 et la colonne 1.

Un autre exemple est celui du clavier PVC.

 

Dans le cas de ce KeyPad, lorsque l'on presse la touche "6", la colonne 3 est mise en contact avec la ligne 2. Cela signifie que les contacts/broches 3 et 6 sont mises en contact.

Détection de la touche pressée

Le principe est tout aussi simple mais avant ces quelques explications, vous devez savoir qu'Arduino dispose d'une librairie permettant d'utiliser facilement un KeyPad.

Pour effectuer la détection de touche sur un keyPad, le programme de votre microcontrolleur doit:

  1. Initialiser toutes les broches colonnes sorties (et les mettre en niveau BAS).
  2. Initialiser toutes les broches ligne en entrée (et les mettre en niveau HAUT).

Le processus de détection se fait comme suit:

  1. Activer la colonne 1 (HAUT)
    1. Lire ligne 1 --> Si Haut TOUCHE 1 pressée
    2. Lire ligne 2 --> Si Haut TOUCHE 2 pressée
    3. Lire ligne 3 --> Si Haut TOUCHE 3 pressée
    4. Lire ligne 4 --> Si Haut TOUCHE A pressée
  2. Désactiver la colonne 1 (BAS)
  3. Activer la colonne 2 (HAUT)
    1. Lire ligne 1 --> Si Haut TOUCHE 4 pressée
    2. Lire ligne 2 --> Si Haut TOUCHE 5 pressée
    3. Lire ligne 3 --> Si Haut TOUCHE 6 pressée
    4. Lire ligne 4 --> Si Haut TOUCHE B pressée
  4. Désactiver la colonne 2 (BAS)
  5. Activer la colonne 3 (HAUT)
    1. ... et ainsi de suite jusqu'à la colonne 4.

Une librairie c'est mieux

Pas besoin de développer un logiciel permettant de faire la lecture des KeyPad.

Arduino dispose de la librairie [KeyPad].

Pour plus d'information sur cette librairie, vous pouvez vous rendre sur www.arduino.cc/playground/Code/Keypad.

L'exemple ci-dessous est basé sur la librairie KeyPad.

Librairie pour Arduino 1.0

Il semblerait que la librairie KeyPad d'origine ne soit plus compatible avec Arduino 1.0. Si une version plus récente n'est pas encore disponible, vous pouvez facilement remédier au problème.

Voici la marche à suivre pour Arduino 1.0:

  • Téléchargez la librairie depuis arduino.cc/fr/Main/LibrairieKeypad.
  • Installer le contenu de l'archive (du fichier ZIP) dans le répertoire librairies de votre Arduino IDE. Assurez-vous que les source de la librairie soit dans un sous répertoire /Keypad/ .
  • Localiser le fichier Keypad.h, ouvrez le et remplacez "#include <WProgram.h>" par "#include <Arduino.h>"
  • Rechargez votre Arduino IDE, recompilez et le tour est joué.

Exemple

L'exemple suivant fait la détection de la touche pressée et renvoi son nom sur la connexion série (Arduino IDE).

Il est basé sur le KeyPad proposé chez MC Hobby. Keypad dont le raccordement électrique correspond à ce qui suit.

Détail du brochage du KeyPad

   

Montage

En plus d'utiliser le keypad, nous avons aussi profité de l'occasion pour exploiter notre assortiment de câble pour Breadboard (simple, pratique et efficace).

 

Raccordement:

Keypad Arduino
L1 Pin 9
L2 Pin 8
L3 Pin 7
L4 Pin 6
C1 Pin 5
C2 Pin 4
C3 Pin 3
C4 Pin 2

Programme

Chargez le programme suivant sur votre Arduino et ouvrez le moniteur série.

Il est prévu pour le KeyPad à Membrane mais vous pourrez facilement le modifier l'autre KeyPad

Lorsque vous pressez une touche, cette dernière est affichée dans le moniteur série.

//  FR: Exemple d'utilisation de la librairie KeyPad - Compatible Arduino V1.0
//  EN: Sample of use of the KeyPad library - Compatible Arduino V1.0
//
// FR: Si vous voulez utiliser ce programme sur un Arduino V1.0 vous aurez probablement
//     besoin de télécharger la librairie Keypad et de la modifier (une seule ligne) pour
//     pouvoir la compiler sans erreur.
//     Pour plus de détail, voir cet article sur le Wiki de MC Hobby.
//        http://mchobby.be/wiki/index.php?title=KeyPad#Librairie_pour_Arduino_1.0
//
// EN: If you want to compile this program under Arduino V1.0, you will probably need to 
//     download the Keypad library and to modify it (only one line). After the modification
//     The program will compile without error.
//      For more details, please see this article on the MC Hobby Wiki
//        http://mchobby.be/wiki/index.php?title=KeyPad#Librairie_pour_Arduino_1.0
//
// Source: http://arduino.cc/fr/Main/LibrairieKeypad
// License: CC-BY-SA for source
// License: CC-BY-SA for modification (by MC Hobby, http://www.mchobby.be )
//
#include <Keypad.h>

const byte ROWS = 4; //4 Lignes (4 Lines, 4 rows)
const byte COLS = 4; //4 Colonnes (4 columns)
char keys[ROWS][COLS] = {
  {'1','2','3', 'A'},
  {'4','5','6', 'B'},
  {'7','8','9', 'C'},
  {'*','0','#', 'D'}
};

// FR: Connecté sur les lignes du KeyPad (L1, L2, L3, L4) 
// EN: Connect to the row pinouts of the keypad
byte rowPins[ROWS] = {9, 8, 7, 6};

// FR: Connecté sur les colonnes dy KeyPad (C1, C2, C3, C4)
// EN: connect to the column pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; 

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup(){
  Serial.begin(9600);
}

void loop(){
  char key = keypad.getKey();

  if (key != NO_KEY){
    Serial.println(key);
  }
}

Voici le résultat que nous obtenons avec un Arduino R3 & Arduino 1.0

 *
1
5
2
4
7
A
5
B
8
C

Où Acheter

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.