Icono del sitio AranaCorp

Convierte tu Arduino en un dispositivo HID

Es posible interconectar Arduino con el ordenador y convertirlo en un dispositivo HID. Así, es posible transformar un Arduino en un controlador de ordenador, del mismo modo que un mando de videojuegos, un teclado de ordenador o un ratón.

Material

Esquema

En este tutorial utilizaremos una sola entrada para probar el teclado y la configuración del dispositivo HID. Así que colocamos un pulsador entre el pin GND y el pin A0 del Arduino.

Puedes utilizar un botón para cada tecla o cualquier sensor para crear tu propio controlador.

Código

Como sólo tenemos un botón, cada vez que lo pulsamos incrementamos la variable btnCount para cambiar el siguiente carácter a mostrar.

//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 el código y evitar tener que encontrar los keycodes, puedes usar la librería USBKeyboard, Keyboard.h (para placas compatibles) o HID-project (con HoodLoader2).

Configuración del dispositivo HID

Para transformar el Arduino en un dispositivo HID, necesitamos modificar el código del puerto USB controlado por el ATmega16U2. Para ello utilizaremos el software Flip, que nos permitirá cambiar el firmware del microprocesador.

Resultado

Una vez hecho esto, desconecte y vuelva a conectar el puerto USB. Abrir un archivo de texto. Al pulsar el botón, los caracteres deben aparecer sucesivamente. Observará que las teclas a,q,w,z están invertidas porque el teclado está configurado en AZERTY.

Cambiar el Arduino de un dispositivo HID a un dispositivo serie

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.

Reinicia el puerto USB con un puente entre los pines ICSP, luego carga el archivo hexadecimal y pulsa «Ejecutar».

Aplicaciones

Fuentes

Salir de la versión móvil