fbpixel
Etiquetas:

É possível fazer a interface do Arduino com o computador e transformá-lo num dispositivo HID. É assim possível transformar um Arduino num controlador de computador da mesma forma que um controlador de jogos de vídeo, um teclado de computador ou um rato.

Material

  • Arduino UNO
  • botão de pressão (ou 1 cabo dupont)

Esquema

Neste tutorial iremos utilizar uma única entrada para testar o teclado e a configuração do dispositivo HID. Assim, colocamos um botão de pressão entre o pino GND e o pino A0 do Arduino.

push-button-arduino_bb Transforme o seu Arduino num dispositivo HID

Pode usar um botão para cada chave ou qualquer sensor para criar o seu próprio controlador.

Código

Como só temos um botão, cada vez que o pressionamos incrementamos a variável btnCount para alterar o próximo carácter a ser exibido.

//azerty       q  b  c  d  e  f  g  h  i  j  k  l  ,  n  o  p  a  r  s  t  u  v  z  x  y  w  &  é  "  '  (  -  è  _  ç  à    )  =  ^  $  *  No fr  m  ù   ²    ;  :  !    <
//qwerty       a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z  1  2  3  4  5  6  7  8  9  0    -  =  [  ]  \  No US  ;  '   `    ,  .  /   No US      
//keycode      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,  45,46,47,48,49,  50,  51,52, 53,  54,55,56,  100}; 


uint8_t buf[8] = { 0 }; //Keyboard report buffer

//Keypad
const int btnPin = A0;
int btnState=false,oldState=true;
int btnCount=4; //Key code A-4 Z-29

void setup() {
  Serial.begin(9600);
  pinMode(btnPin,INPUT_PULLUP);
}

void loop() {
  sendKey();
}


void sendKey() { /* function readAbtn */
  //// Read button states from keypad
  getBtn();
  if (btnState!=oldState and btnState==true) {
    buf[2] = btnCount++; // keycode
    Serial.write(buf, 8); // Send keypress 
    releaseKey(); 
  }
  if(btnCount>29) btnCount=4;
  oldState=btnState;
}

void getBtn() { /* function getABtn */
  //// Read button states from keypad
  if (analogRead(btnPin) > 200) {
    btnState=false;
  } else {
    btnState=true;
  }
  delay(100); //anti-bounce delay
}


void releaseKey() {
  buf[0] = 0;
  buf[2] = 0;
  Serial.write(buf, 8); // Send Release key
}

Para simplificar o código e evitar ter de encontrar os códigos de teclas, pode utilizar a biblioteca USBKeyboard, Keyboard.h (para placas compatíveis) ou HID-project (com HoodLoader2).

Configuração do dispositivo HID

Para transformar o Arduino num dispositivo HID, precisamos de modificar o código da porta USB controlada pelo ATmega16U2. Para o efeito, utilizaremos o software Flip que nos permitirá alterar o firmware do microprocessador.

arduino-hid-flip Transforme o seu Arduino num dispositivo HID
  • Seleccione o microprocessador a partir da lista
arduino-hid-flip-select-device Transforme o seu Arduino num dispositivo HID
  • Reinicie a porta USB ligando os dois pinos mais à esquerda da porta ICSP2. (os LEDs Tx e Rx devem acender-se).
  • Seleccione Definições>Comunicação>USB Ctrl+U, depois clique em “Abrir”.
arduino-hid-flip-open-usb Transforme o seu Arduino num dispositivo HID
arduino-hid-flip-load-hex Transforme o seu Arduino num dispositivo HID

Resultado

Uma vez feito isto, desligar e voltar a ligar a porta USB. Abrir um ficheiro de texto. Quando se prime o botão, os caracteres devem aparecer sucessivamente. Notará que as teclas a,q,w,z estão invertidas porque o teclado está configurado em AZERTY.

arduino-hid-keyboard-result Transforme o seu Arduino num dispositivo HID

Mudar o Arduino de um dispositivo HID para um dispositivo Serial

Pour retrouver un fonctionnement normal de l’Arduino, on refait la manipulation avec le logiciel Flip mais à la place du fichier arduino-keyboard.hex on charge le fichier Arduino-usbserial-uno.hex.

Reinicie a porta USB com uma ponte entre os pinos ICSP, depois carregue o ficheiro hexadecimal e prima “Run”.

arduino-hid-flip-usb-serial Transforme o seu Arduino num dispositivo HID

Aplicações

  • Criar um teclado ou um controlador de videojogo com Arduino
  • Utilização do Arduino para conduzir automaticamente um computador

Fontes