fbpixel
Etiquetas:
0
(0)

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

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.

  • Seleccione o microprocessador a partir da lista
  • 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”.

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

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

Fontes

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?