Site icon AranaCorp

Gérer un Clavier 4×4 Analogique avec Arduino

5
(1)

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

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

Référence

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie

How useful was this post?

Click on a star to rate it!

Average rating 5 / 5. Vote count: 1

No votes so far! Be the first to rate this post.

Quitter la version mobile