Composants utilisés
- Un module clavier matriciel de 16 touches avec 4 boutons et 8 leds
- Une carte Arduino Uno
- Des câbles avec connecteurs Dupont mâle / femelle
Le module clavier
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
- 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