Site icon AranaCorp

Transforme o seu Arduino num dispositivo HID

É 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

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.

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.

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.

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

Aplicações

Fontes

Exit mobile version