Muitos projetos feito com o Arduino (os mais legais), necessitam captar entrada de dados. Normalmente para cada entrada, um pino é utilizado e caso você não esteja utilizando o Arduino Mega, sua opções começam a ficar mais limitada.
A entrada de dados, pode ocorrer através de um botão (táctil – push button), um sensor de toque (touch sensor), sensor de presença (ultrassônico ou infravermelho),um LDR (Light-Dependent Resistor – sensor fotovoltaico – sensor de luz), etc…
Caso você tenha um teclado antigo, com conexão PS2 será possível expandir a capacidade do seu Arduino. Utilizando somente 2 pinos (Clock e Data) + Ground e 5v, é possível trabalhar com até 209 teclas (incluindo funções com Shift e Alt Gr).
Nós modificamos a biblioteca (library) da equipe do PJRC para o teclado mais utilizado no Brasil, o ABNT-2.
A biblioteca (library) do PS2Keyboard desenvolvida pelo pessoal do PJRC e poderá ser baixada aqui.
A biblioteca modificada está disponível em nossa área de download.
Agora vamos ao que interessa:
O que você vai precisar:
1 conector PS2 – o nosso extraímos de uma placa mãe antiga.
4 fios para conexão (somente para o teclado)
1 placa Arduino ** A Conexão varia conforme a placa.
IDE do Arduino
Identificando as portas:
Primeiramente você deverá identificar as portas do seu conector:
Cada entrada deverá ser identificada com sua saída equivalente.
Uma maneira simples de saber qual é a porta correta é através do teste de continuidade do multímetro.
Através dessa função, quando a ponta de prova estiver no local correto ele soará um apito indicado a continuidade.
Exemplo:
Coloque uma ponta de prova do multímetro em 2 e a outra em 1. Sendo a mesma, uma informação sonora será ouvida.
Uma vez identificada, usaremos somente as 4 portas indicadas abaixo:
Conectando ao Arduino/Genuino:
A conexão é muito simples, porém atenção ao tipo de Arduino que você utiliza (veja tabela abaixo).
A Placa UNO, por exemplo, consegue receber os dados do Clock somente através dos pinos 2 e 3, o Duemilanova, em todos os pinos, exceto o 13. Esses pinos são conhecidos como IRQ (Interrupt Request).
Veja Tabela abaixo:
Arduino | Pinos IRQ – Interrupção |
Uno, Nano, Mini e outras placas baseada no 328 | 2, 3 |
Mega, Mega2560, MegaADK | 2, 3, 18, 19, 20, 21 |
Micro, Leonardo e outras placas baseada no 32u4 | 0, 1, 2, 3, 7 |
Zero | todos os pinos digitais, exceto 4 |
MKR1000 Rev.1 | 0, 1, 4, 5, 6, 7, 8, 9, A1, A2 |
Duemilanove | todos os pinos digitais, exceto 13 |
101 | todos os pinos digitais |
Fonte: https://www.Arduino.cc/en/Reference/AttachInterrupt
Veja os caracteres que nós mapeamos para uso do teclado ABNT2.
Posição das teclas mapeadas no array da library:
Programando a IDE do Arduino:
Uma vez que o Arduino esteja conectado ao teclado, é necessário instalar o programa de comunicação:
A biblioteca precisa já estar instalada na pasta equivalente (antes de abrir a IDE).
#include <PS2Keyboard.h> /* PS2Keyboard library example PS2Keyboard now requries both pins specified for begin() keyboard.begin(data_pin, irq_pin); Valid irq pins: Arduino Uno: 2, 3 Arduino Due: All pins, except 13 (LED) Arduino Mega: 2, 3, 18, 19, 20, 21 for more information you can read the original wiki in arduino.cc at http://www.arduino.cc/playground/Main/PS2Keyboard or http://www.pjrc.com/teensy/td_libs_PS2Keyboard.html Like the Original library and example this is under LGPL license. Modified by Cuninganreset@gmail.com on 2010-03-22 Modified by Paul Stoffregen <paul@pjrc.com> June 2010 Modified by Edson Sobreira <edson.sobreira@gmail.com> October 2016 */ #include <PS2Keyboard.h> const int DataPin = 8; const int IRQpin = 2; int led = 5; // the pin that the LED is attached to int b = 0; // how bright the LED is int f = 5; // how many points to fade the LED by PS2Keyboard keyboard; void setup() { pinMode(5, OUTPUT); delay(1000); keyboard.begin(DataPin, IRQpin); //Selecione o seu teclado - não selecionar nenhum = Teclado US. Select your keyboard. Not selecting = US keyboard //keyboard.begin(DataPin, IRQpin, PS2Keymap_French); keyboard.begin(DataPin, IRQpin, PS2Keymap_Brazil ); //keyboard.begin(DataPin, IRQpin, PS2Keymap_German ); Serial.begin(9600); Serial.println("Keyboard Test Hackeduca:"); } void loop() { if (keyboard.available()) { // read the next key byte c = keyboard.read(); if (c == PS2_ENTER) { Serial.println(); } else if (c == PS2_TAB) { Serial.print("[Tab]"); } else if (c == PS2_ESC) { Serial.print("[ESC]"); } else if (c == PS2_PAGEDOWN) { Serial.print("[PgDn]"); } else if (c == PS2_PAGEUP) { Serial.print("[PgUp]"); } else if (c == PS2_LEFTARROW) { Serial.print("[Esquerda]"); } else if (c == PS2_RIGHTARROW) { Serial.print("[Direita]"); } else if (c == PS2_UPARROW) { Serial.print("[Cima]"); } else if (c == PS2_DOWNARROW) { Serial.print("[Baixo]"); } else if (c == PS2_DELETE) { Serial.print("[Del]"); //Teste para ligar o LED no Pino 04 após tecla DEL //Test to turn a LED on when keystroke 'a' or 'A' is pressed } else if (c == 'a') { // LED will be on for 1 second - LED irá ligar por 1 segundo Serial.write(c); digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); } else if (c == 'A') {// LED irá piscar 10 vezes - LED will blink 10 times Serial.write(c); for (int l=1; l<=10; l=l+1) { digitalWrite(led, HIGH); delay(100); digitalWrite(led, LOW); delay(100); } } else if (c== 225) {// LED irá fazer um efeito Fade e depois apagar - LED will fade until max and turn off Serial.write(c); for (int b = 0; b <= 255; b++) { analogWrite(led, b); delay(40); } analogWrite(led, 0); } else { // otherwise, just print all normal characters Serial.write(c); } } }
No exemplo que fizemos, ocorrerá o seguinte:
Pressionando a tecla ‘A’ o LED irá acender conforme abaixo:
‘a’ – LED irá piscar, permanecendo aceso por 1 segundo.
‘A’ [Shift + a] – LED irá piscar por 10 vezes antes se de apagar
‘á’ [Alt Gr + a] – LED irá fazer um FADE até 255 (pino PWM) e depois se apagará.
Este é um bom exemplo do uso dessa biblioteca, onde uma única tecla se transforma em uma combinação com 3 funções.
Esquema de ligação do LED no Arduino:
Não deixe de compartilhar conosco o seu projeto!
8 Comments
como faço para usar as teclas F1 F2 e etc ?
As teclas F1, F2, etc… são identificadas como PS2_F1, PS2_F2, etc…
Exemplo:
} else if (c == ‘PS2_F1’) {// LED irá piscar 10 vezes – LED will blink 10 times
Serial.write(c);
for (int l=1; l<=10; l=l+1) { digitalWrite(led, HIGH); delay(100); digitalWrite(led, LOW); delay(100); }
Na library disponível para download também está disponível essa informação.
Se inscreva em nosso site para receber novidades
obrigado!!
Este programa apaga a informação? eu experimentei um parecido num arduino uno e o clicava em apagar no (backspace) e aperecia (DEL) em vez de apagar.
Olá!
A qual informação você se refere?
A ideia desta biblioteca é transformar um teclado em múltiplos botões para serem utilizados em um projeto com Arduino.
ele lê mais de uma tecla ao mesmo tempo?
Sim.