Que ce soit une calculatrice ou le digicode d’un immeuble, nous nous servons couramment des claviers numériques. Le clavier numérique 4×4 est une matrice de 16 boutons dont les états peuvent être détectés par un microcontrôleur. Ce module nécessite une seule entrée analogique du microcontrôleur contrairement au Clavier Numérique 4×4 digital.
Matériel
- Ordinateur
- Arduino UNO
- Câble USB A Mâle/B Mâle
- AnalogKeypad4x4
- câble Dupont F/M x3
Principe de fonctionnement
Le clavier numérique avec sorite analogique est un ensemble de 16 boutons qui sont montés en matrice avec des résistances de pullup de valeurs différentes. Lorsqu’on appuie sur un bouton le circuit va se fermer avec la résistance et la valeur de tension sur la sortie analogique sera différente pour chaque bouton. L’avantage de ce type de montage est que l’on peut gérer 16 boutons avec seulement 1 entrée analogique du microcontrôleur. Par contre, il n’est pas possible d’appuyer sur deux boutons en même temps.
Schéma
Le clavier numérique utilise une entrée analogique de l’Arduino. Nous branchons donc la sortie du clavier sur la broche A0 du microcontrôleur. Le clavier peut être alimenté par la sortie 5V de l’Arduino.
Code
Pour gérer le clavier numérique, le principe est de lire la valeur de l’entrée analogique qui correspond à un bouton. Pour cela nous allons comparer la valeur de la broche analogique à la valeur donnée à chaque bouton.
Il est important de noter que si on appui sur deux boutons, seul le bouton avec la valeur la plus haute sera retenu.
//Constants #define nbABtn 16 //Parameters const int abtnPin = A0; const int valThresh[nbABtn] = {1000, 900, 820, 750, 660, 620, 585, 540, 500, 475, 455, 425, 370, 300, 260, 200}; void setup() { //Init Serial USB Serial.begin(9600); Serial.println(F("Initialize System")); } void loop() { readAbtn(); } void readAbtn() { /* function readAbtn */ //// Read button states from keypad int btnId = getABtn(); if (btnId) { Serial.print("Button pressed : "); Serial.println(btnId); delay(200); } } int getABtn() { /* function getABtn */ //// Read button states from keypad int val = analogRead(abtnPin); if (val <= 200) { return 0; } else { for (int i = 0; i < 16; i++) { if (val > valThresh[i]) return i + 1; } } }
Résultat
Lorsqu’une touche du clavier est pressée, nous observons que la valeur associée s’affiche correctement dans le moniteur série.
Applications
- Créer une interface avec plusieurs boutons
- Créer une serrure actionnée par digicode
- Développer une alarme qui s’active ou se désactive à l’aide d’un mot de passe
- Développer une interface MIDI
Référence
- Retrouver aussi la gestion d’un clavier 4×4 avec sorties digitales
- Résistance de Pullup
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie