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 keypad(), e teríamos a conexão P8 - quarta coluna - nos terminais do teclado.
Esquema de ligação:
Código fonte:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | /*--------------------------------------------------------- Programa : TECLADO MATRICIAL Autor : Fellipe Couto [ http://www.efeitonerd.com.br ] Data : 12/11/2017 ---------------------------------------------------------*/ /*--- SETUP ---*/ void setup() { Serial.begin(9600); //Inicia a comunicação serial } /*--- LOOP PRINCIPAL ---*/ void loop() { String key = keypad(); //Retorna o valor da tecla pressionada na variável key if (key != "") { Serial.println("Tecla pressionada: " + key); } } /*--- RETORNA A TECLA PRESSIONADA NO TECLADO ---*/ String keypad() { const int totalLines = 4; //Total de linhas do teclado const int totalColumns = 3; //Total de colunas do teclado const int lines[totalLines] = {2, 3, 4, 5}; //Portas de conexão das linhas const int columns[totalColumns] = {6, 7, 8}; //Portas de conexão das colunas 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 i = 0; i < totalColumns; i++) { //Configura os pinos das colunas como entrada com pull-up pinMode(columns[i], INPUT_PULLUP); } for (int w = 0; w < totalLines; w++) { //Varre as linhas for (int i = 0; i < totalLines; i++) { digitalWrite(lines[i], HIGH); } digitalWrite(lines[w], LOW); //Uma linha LOW por vez for (int c = 0; c < totalColumns; c++) { //Varre as colunas while (digitalRead(columns[c]) == LOW) { keyPressed = keyBoard[w][c]; } } } delay(50); return keyPressed; } |
Nenhum comentário:
Postar um comentário