12 de novembro de 2017

Teclado Matricial

Uma função para ler um teclado matricial e retornar a tecla pressionada.



A ligação interna do teclado, por padrão é como na imagem acima.

Nos terminais temos a ligação das linhas seguido das ligações das colunas.
Esse é um teclado 4x3, e para utilizar um modelo 4x4, é só atualizar os valores das variáveis na função Keyboard(), e teríamos a conexão P8 - quarta coluna - nos terminais do teclado.

Esquema de ligação:

Código fonte:
/*----------------------------
  Programa : TECLADO MATRICIAL
  Autor    : Fellipe Couto
  Data     : 12/11/2017
  ----------------------------*/

/*----- SETUP -----*/
void setup() {
  Serial.begin(9600); //Inicia a comunicação serial
}

/*----- LOOP PRINCIPAL -----*/
void loop() {
  String key = Keyboard(); //Retorna o valor da tecla pressionada na variável key
  if (key != "") {
    Serial.println("Tecla pressionada: " + key);
  }
}

/*----- RETORNA A TECLA PRESSIONADA NO TECLADO -----*/
String Keyboard() {
  const int totalLines = 4;   //Total de linhas do teclado
  const int totalColumns = 3; //Total de colunas do teclado
  const int lines[totalLines] = {10, 11, 12, 13}; //Linhas nas portas digitais
  const int columns[totalColumns] = {A0, A1, A2}; //Colunas nas entradas analógicas com resistores pull-down 10k
  const String keyBoard[totalLines][totalColumns] = { //Disposição das teclas
    {"1", "2", "3"},
    {"4", "5", "6"},
    {"7", "8", "9"},
    {"*", "0", "#"}
  };
  const String keyPressed = "";
  for (int i = 0; i < totalLines; i++) { //Configura os pinos das linhas como saída
    pinMode(lines[i], OUTPUT);
  }
  for (int w = 0; w < totalLines; w++) { //Varre as linhas
    for (int i = 0; i < totalLines; i++) {
      digitalWrite(lines[i], LOW);
    }
    digitalWrite(lines[w], HIGH); //Uma linha HIGH por vez
    for (int c = 0; c < totalColumns; c++) { //Varre as colunas
      while ( analogRead(columns[c]) > 600 ) {
        keyPressed = keyBoard[w][c];
      }
    }
  }
  delay(50);
  return keyPressed;
}

Nenhum comentário:

Postar um comentário