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 timesSerial.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.