Clavier matriciel de 16 touches, 4 boutons 8 leds Arduino

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

Clavier matriciel de 16 touches, 4 boutons 8 leds Arduino

Messagepar tiptop » Ven 23 Aoû 2013 19:18

Clavier matriciel de 16 touches, 4 boutons 8 leds, utilisation avec Arduino

Image

Composants utilisés

Le module clavier
Image

Le module clavier (livré monté prêt à l'emploi) comporte :
  • une matrice de 4 x 4 boutons poussoirs noirs, accessible sur un connecteur à 4 x 2 broches (multiplexage).
  • une ligne de 4 boutons poussoirs rouges, en série avec une résistance de 1k entre Vcc et GND, directement accessibles sur un connecteur à 3 x 2 broches
  • 8 leds rouges témoin montées individuellement sur 8 lignes en série avec une résistance de 1k chacune, et accessibles directement sur un connecteur de 10 broches. (montage à cathode commune).

Brochage du module
Image

  • L1 L2 L3 L4 --> 4 lignes
  • R1 R2 R3 R4 -->4 colonnes
  • GND et V --> Masse et Alimentation +5V
  • S1 S2 S3 S4 --> Broches des 4 boutons poussoirs rouges
  • D1 D2 D3 D4 D5 D6 D7 D8 GND --> broches des 8 leds

Principe de fonctionnement du clavier matriciel
Au lieu d'utiliser 16 fils et 16 pins de l'Arduino, (1 par bouton) on regroupe les boutons sur 4 lignes et 4 colonnes, ce qui permet de les contrôler à partir d'un simple réseau de 8 fils.
C'est du multiplexage, plus économique en câblage.
La connaissance de la ligne et de la colonne activées permet de savoir quel bouton a été appuyé (un à la fois).

Programmation du clavier matriciel
Source : http://arduino.cc/fr/Main/LibrairieKeypad

La librairie keypad permet de gérer des claviers matriciels sous Arduino.
Télécharger et installer Keypad, disponible ici :
http://www.arduino.cc/playground/upload ... ad_1-0.zip
en créant un dossier C:\Program Files (x86)\arduino-1.0\libraries\Keypad
pour y placer les 2 fichiers Keypad.cpp et Keypad.h

Corriger cette librairie kaypad.h (pour IDE 1.0)
et remplacer la ligne 36 "#include <WProgram.h>" par #include <Arduino.h>

On l'utilise ensuite dans son programme. Placer au début du code
#inlcude <Keypad.h>

On créé un objet clavier avec

Keypad(makeKeymap(userKeymap), row[], col[], rows, cols)

  • userKeymap : tableau à 2 dimensions définissant les symboles des touches, par exemple 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, A, B, C, D, E, F. (ou ce que vous voulez).
  • row[] : tableau correspondant aux numéros des broches utilisées pour les lignes, selon son câblage, ici j'utilise pin2, pin3, pin4, pin5 (digital).
  • col[] : tableau correspondant aux numéros des broches utilisées pour les colonnes, ici j'utilise pin6, pin7, pin8, pin9 (digital)
  • rows : nombre de lignes, ici 4
  • cols : nombre de colonnes, ici 4 (clavier 16 touches)

char getKey()
Renvoie la touche appuyée, en caractère Ascii.

setDebounceTime(unsigned int time)
permet une pause anti-rebond.

addEventListener(keypadEvent)
Crée un événement si le clavier est utilisé.
Vous pouvez regarder un exemple dans le logiciel Arduino dans "File -> Sketchbook -> Examples -> Library-Keypad -> EventSerialKeypad"

La librairie est non bloquante.

Code pour clavier matriciel 16 touches

Code: Tout sélectionner
//==== Utilisation de clavier matriciel 4 x4 boutons
// tiptopboards.com
// Rolland 23 08 2013
// télécharger et installer la librairie Keypad
//
//===================================================
#include <Keypad.h>

//Définition du clavier 4 x4 boutons
const byte ROWS = 4; //4 lignes
const byte COLS = 4; //4 colonnes
// Donner un code Ascii aux 16 touches, par exemple 0-F
char keys[ROWS][COLS] = {
  {'1','2','3','4'},
  {'5','6','7','8'},
  {'9','10','A','B'},
  {'C','D','E','F'}
};
byte rowPins[ROWS] = {2, 3, 4, 5}; //les 4 lignes du clavier sur les pins arduino digitales
byte colPins[COLS] = {6, 7, 8, 9}; //les 4 colonnes du clavier

//Créer cet objet clavier
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup(){
  Serial.begin(9600);   //Moniteur série (écran PC)
  Serial.println("Utilisation du clavier 4 x f4 touches");
}

void loop(){
  char key = keypad.getKey();   //Surveiller le calvier

  if (key != NO_KEY){
    Serial.println(key);  //Afficher le code ascii de la touche appuyée
  }
}


Utilisation des 4 boutons rouges
Ils sont en accès direct, sans multiplexage.

Câblage de leurs broches S1 - S4 sur les pins de l'Arduino pin10, pin11, pin 12, pin 13 (digital).
Les masses du module et de l'arduino sont connectées (GND).

Il n'y a pas besoin de leur ajouter de résistances (elles sont déjà montées).

Code pour clavier 4 touches et 8 leds

Code: Tout sélectionner
//==== Utilisation de clavier 4  boutons et 8 leds
// tiptopboards.com
// Rolland 23 08 2013
//
//===================================================

// Câblage des 4 boutons sur Arduino
int bouton1=10;   //4 boutons rouges sur pins 10 à 13
int bouton2=11;
int bouton3=12;
int bouton4=13;


void setup(){
  Serial.begin(9600);   //Moniteur série (écran PC)
  Serial.println("Utilisation de 4 boutons");
 
 pinMode(bouton1,INPUT);  //les boutons sont des entrées
 pinMode(bouton2,INPUT);
 pinMode(bouton3,INPUT);
 pinMode(bouton4,INPUT);
 //Sortie 1 au repos, passe à 0 si appuyé

//Allumage des leds du module (8)
//exemple de la led D3, branchée sur pin A0 (utilisée en digital)
 pinMode(A0, OUTPUT);   //LED sur pin A0 en sortie
digitalWrite(A0, HIGH);  //High = éteindre
   
}

void loop(){
 int val1=digitalRead(bouton1);
 int val2=digitalRead(bouton2);
 int val3=digitalRead(bouton3);
 int val4=digitalRead(bouton4);
 Serial.print(val1);
 Serial.print(" ");
 Serial.print(val2);
 Serial.print(" ");
 Serial.print(val3);
 Serial.print(" ");
 Serial.print(val4);
 Serial.println(" ");
 
 if (val3==0)  //Allumer la led témoin D3 si le bouton3 est appuyé
 { digitalWrite(A0, LOW);  //Allumer cette led (passer à 0)
 delay(500);  //rester allumé 500ms
 }
  digitalWrite(A0, HIGH);  //High = éteindre la led
}


Références
Librairie Keypad (en anglais)
http://playground.arduino.cc/Main/KeypadTutorial
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 3 invités