Seja numa calculadora ou num interfone de edifício, utilizamos teclados numéricos com frequência. O teclado numérico 4×4 é uma matriz de 16 botões cujos estados podem ser detectados por um microcontrolador. Este módulo requer apenas uma entrada analógica do microcontrolador, ao contrário do teclado numérico 4×4 digital.

Material
- Computador
- Arduino UNO
- Cabo USB A Macho/B Macho
- Teclado 4×4 analógico
- Cabo Dupont F/M x3
Princípio de funcionamento
O teclado numérico com saída analógica é um conjunto de 16 botões montados numa matriz com resistências de pull-up de diferentes valores. Quando um botão é pressionado, o circuito se fecha com a resistência e o valor da tensão na saída analógica é diferente para cada botão. A vantagem deste tipo de circuito é que se pode gerir 16 botões com apenas 1 entrada analógica do microcontrolador. No entanto, não é possível pressionar dois botões ao mesmo tempo.

Esquema
O teclado numéricol utiliza uma entrada analógica do Arduino. Assim, ligamos a saída do teclado ao pino A0 do microcontrolador. O teclado pode ser alimentado pela saída de 5V do Arduino.

Código
O princípio para gerir o teclado numérico é ler o valor da entrada analógica que corresponde a um botão. Para isso, comparamos o valor do pino analógico com o valor atribuído a cada botão.
É importante notar que, se pressionarmos dois botões, apenas o botão com o maior valor será retido.
//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;
}
}
}
Resultado
Quando uma tecla do teclado é pressionada, observamos o valor associado ser corretamente apresentado no monitor serial.

Aplicações
- Criar uma interface com vários botões
- Criar uma fechadura operada por teclado
- Desenvolver um alarme que pode ser ativado ou desativado com uma senha
- Desenvolver uma interface MIDI
Referências
- Leia também sobre a gestão de um teclado 4×4 com saídas digitais
- Resistência de pull-up
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie