É 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.
- Descarregar e instalar o logiciel Flip
- 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”.
- Carregue o ficheiro Arduino-chave-0.3.hex em File> Load HEX…, depois prima “Run”
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