Clavier matriciel à membrane avec Arduino

Utilisation de capteurs et composants électroniques avec Arduino.
Une fiche de tutoriel pour chaque.

Clavier matriciel à membrane avec Arduino

Messagepar tiptop » Lun 16 Sep 2013 20:24

Utilisation d'un clavier matriciel à membrane avec Arduino

Image.Image

Composants utilisés

Principe de fonctionnement
Le clavier comporte 16 touches, dont 10 numériques (0-9) et 6 touches marquées # * A B C D.
Il est matriciel : au lieu d'avoir 16 fils (1 par touche) et une masse, le multiplexage n'utilise que 8 sorties : 4 lignes et 4 colonnes.

Utilisations
  • Téléphonie
  • Clavier de digicode
  • Clavier d'alarme
  • Saisie de données numériques dans un programme Arduino (calibrage...)
  • Choix de menu...
Le clavier peut se coller sur un support, il est étanche.

Câblage
Il y a 8 fils en sortie du clavier, 4 lignes et 4 colonnes.
Vu de face, de gauche à droite :
pin 1-4 les quatre lignes, pin 5-8 les quatre colonnes.
Image

On le branche sur les 8 entrées digitales successives de la carte Arduino Uno de D9 à D2
pin1 --> D9
pin 2--> D8
pin 3--> D7
pin 4--> D6
pin 5--> D5
pin 6--> D4
pin 7--> D3
pin 8--> D2

Image

Programmation
Télécharger et installer la librairie Keypad.h
http://arduino.cc/fr/Main/LibrairieKeypad

Ce programme créé un objet de type Keypad, puis lit les entrées clavier et affiche sur le serial monitor les entrées.
On peut avec cette librairie :
  • lire la touche appuyée : char getKey()
  • surveiller l'état du clavier : KeypadState getState()
  • définir un délai d'appui pour valider la saisie : setHoldTime(unsigned int time)
  • paramétrer une pause anti-rebond : setDebounceTime(unsigned int time)
  • créer un événement si le clavier est utilisé : addEventListener(keypadEvent)

Code: Tout sélectionner
//*************************************************
// Clavier à membranne 16 touches avec Arduino
// tiptopboards.com  16 09 2013 C Rolland
// Exemple d'utilsiation du clavier 4 x4 touches
//
//
//*************************************************
#include <Keypad.h>

const byte ROWS = 4; //4 lignes
const byte COLS = 4; //4 colonnes
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
//Brancher le clavier sur 2 3 4 5 (colonnes) et 6 7 8 9 (lignes)
byte rowPins[ROWS] = {9, 8, 7, 6}; //Lignes
byte colPins[COLS] = {5, 4, 3, 2}; //Colonnes
// Connections des touches
/*
S1  contact 4 8
S2  contact 3 8
S3  contact 2 8
S4  contact 1 8
S5  contact 4 7
S6  contact 3 7
S9  contact 4 6
S10  contact 3 6
S11  contact 2 6
S12  contact 1 6
S13  contact 4 5
S14  contact 3 5
S15  contact 2 5
S16  contact  1 5
*/

// Initialiser une instance de la classe keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){
  Serial.begin(9600);   //Serial monitor
  Serial.println("Test de clavier 16 touches");
 
  // Pour activer l'état HOLD
  unsigned int time_hold = 4;
  keypad.setHoldTime(time_hold);
 
  //Anti rebond
  unsigned int time_anti_rebond = 4;  //4 ms
  keypad.setDebounceTime(time_anti_rebond);
   
}

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

  if (key != NO_KEY){
    Serial.println(key);   //Affiche la touche saisie
  }
}  //Fin de void loop





Image

Références
How to Connect and Read a Keypad with an Arduino (en anglais)
http://www.learningaboutelectronics.com ... ircuit.php

Contrôle d'accès avec mot de passe (en anglais)
http://www.instructables.com/id/Access- ... ogramming/
tiptopboards - admin
Avatar de l’utilisateur
tiptop
Administrateur du site
 
Messages: 88
Inscription: Mar 13 Aoû 2013 20:38
Localisation: 38

Retourner vers Capteurs et composants

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 5 invités