Olá Galera, alguém já simulou um teclado ps2 com arduino? Eu já tentei vários tutoriais e nada funcionou, quando plugo o conector ps2 no pc, nada é reconhecido e não aparece nada no pc. Alguém já conseguiu? Tentem aí, se conseguirem me dá um alô.
Tutoriais:
http://forum.arduino.cc/index.php/topic,64101.0.html
http://dduino.blogspot.com.br/2011/11/arduino-ps2-emulator-computer...
http://dkudrow.blogspot.com.br/2013/08/ps2-keyboard-emulation-with-...
Tags:
Murilo,
Após vários testes, consegui emular um teclado PS2 da seguinte maneira:
Baixar a biblioteca ps2dev no site Arduino.cc e instalar no diretório libraries da sua instalação IDE do arduino
Se for usar a versão IDE acima de 1.0 modificar os arquivos conforme abaixo:
arquivo ps2dev.h
modificar a linha "#include "WConstants.h"" por "#include "Arduino.h""
arquivo ps2dev.cpp
modificar a linha "#include "WConstants.h"" por "#include "Arduino.h""
Conseguir um cabo PS2 de mouse ou teclado quebrado.
Pinagem do cabo PS2:
Será usado o cabo PS2 macho para ligar no arduino.
Transferir o seguinte programa para o Arduino:
/emulador de teclado PS2
// Pino 1- Data
// Pino 2- NC
// Pino 3- GND
// Pino 4- 5V
// Pino 5- CLK
// Pino 6 - NC
//
// inclusão de bibliotecas
#include "ps2dev.h" // to emulate a PS/2 device
// criação de objeto keyboard
PS2dev keyboard(3,2); // PS2dev object (2:data, 3:clock)
// declaração variaveis
int enabled = 0; // pseudo variable for state of "keyboard"
unsigned char c; //char stores data recieved from computer for KBD
void ack()
{
//acknowledge commands
while(keyboard.write(0xFA));
}
int keyboardcommand(int command)
{
unsigned char val;
switch (command)
{
case 0xFF: //reset
ack();
//the while loop lets us wait for the host to be ready
while(keyboard.write(0xAA)!=0);
break;
case 0xFE: //resend
ack();
break;
case 0xF6: //set defaults
//enter stream mode
ack();
break;
case 0xF5: //disable data reporting
//FM
enabled = 0;
ack();
break;
case 0xF4: //enable data reporting
//FM
enabled = 1;
ack();
break;
case 0xF3: //set typematic rate
ack();
keyboard.read(&val); //do nothing with the rate
ack();
break;
case 0xF2: //get device id
ack();
keyboard.write(0xAB);
keyboard.write(0x83);
break;
case 0xF0: //set scan code set
ack();
keyboard.read(&val); //do nothing with the rate
ack();
break;
case 0xEE: //echo
//ack();
keyboard.write(0xEE);
break;
case 0xED: //set/reset LEDs
ack();
keyboard.read(&val); //do nothing with the rate
ack();
break;
}
}
void setup()
{
// send the keyboard start up
while(keyboard.write(0xAA)!=0);
delay(10);
// initialize the serial port:
Serial.begin(9600);
}
void loop()
{
// debug to check for spikes in the sensor etc..
// Serial.println(average);
//if host device wants to send a command:
if( (digitalRead(3)==LOW) || (digitalRead(2) == LOW))
{
while(keyboard.read(&c)) ;
keyboardcommand(c);
}
else
{
Serial.println("cinesio");
// tecla enter
keyboard.write(0x5A);
delay(700);
// tecla c
keyboard.write(0x21);
delay(10);
// tecla i
keyboard.write(0x43);
delay(10);
// tecla n
keyboard.write(0x31);
delay(10);
// tecla e
keyboard.write(0x24);
delay(10);
// tecla s
keyboard.write(0x1B);
delay(10);
// tecla i
keyboard.write(0x43);
delay(10);
// tecla o
keyboard.write(0x44);
delay(700);
// tecla enter
keyboard.write(0x5A);
}
delay(5000);
}
Para este exemplo ligar o computador com o mouse e o cabo PS2 ligado no arduino.
Abrir uma janela Dos ( cmd ) ou o bloco de notas. Deverá se escrito as letras enviadas no código acima.
Para enviar uma letra, comando ou tecla de função, é necessário consultar uma tabela scan code com os códigos de cada tecla.
Para o teste foi usada aversão IDE 1.0.1
Sds,
Obrigado Cinésio, vou testar esse código.
Abraços, MLN
Cinésio, vc poderia gravar um vídeo pra mim, mostrando passa-a-passo, pois aqui não funcionou novamente.
Up
Murilo,
Se for possível irei fazer o vídeo neste final de semana e postar aqui.
Sds,
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por