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

Exibições: 3867

Responder esta

Respostas a este tópico

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,

Ok, aguardo o vídeo, obrigado pela disposição em me ajudar.

MLN

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço