fbpixel
Etiquetas:
0
(0)

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

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 0 / 5. Vote count: 0

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

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?