Emular teclado desde serial


           Emular un teclado desde Arduino requiere que sea un modelo equipado con un procesador ATMEGA32U4, por ejemplo un Leonardo o un ProMini. En Arduino Uno también puede hacerse, pero requiere cambiar el Firmware.
           Como necesitaba esta funcionalidad para un ESP8266 y para que sea "universal", he programado una aplicación en Visual Studio (Serial2SendKeys) que recibe por el puerto serie el carácter que mandemos y lo trasforma en una pulsación de tecla en la ventana activa de Windows. Lógicamente funciona con Arduino Uno y cualquier otro sistema que comunique por serie.
           El programa para ESP8266 o cualquier Arduino no puede ser más simple.

           Enviamos un Serial.print con el comando de tecla.

           Cada tecla se representa con uno o más caracteres. Para especificar un carácter de teclado único, use el propio carácter. Por ejemplo, para representar la letra A, use "A" para la cadena. Para representar más de un carácter, anexe cada carácter adicional al que lo preceda. Para representar las letras A, B y C, use "ABC" para la cadena.

           El signo más ( + ), el acento circunflejo ( ^ ), el signo de porcentaje ( % ), la tilde de la ñ ( ~ ) y los paréntesis ( ) tienen significados especiales para SendKeys. Para especificar uno de estos caracteres, hay que ponerlo entre llaves ( {}). Por ejemplo, para especificar el signo más, usar {+}

           Hay caracteres que no se muestran cuando presionamos una tecla, como ENTRAR o TAB, y teclas que representan acciones en lugar de caracteres, use los códigos que figuran a continuación:

int Var;
void setup() {
  Serial.begin(9600);}

void loop() {
  //Control del switch por pulsadores o software
 
    switch (Var) {
     case 1:
       Serial.print("{F1}");
       break;
     case 2:
       Serial.print("{DOWN}");
       break;
     case 3:
       Serial.print("{LEFT}");   //LEFT Pasa página
       break;
     case 4:
       Serial.print("{RIGHT}");   //RIGHT retrocede pagina
       break;
     case 5:
       Serial.print("A");
       break;
     default: 
      return;    
    }
  }
           Para especificar teclas combinadas con cualquier de las teclas MAYÚS, CTRL y ALT, use antes del código de tecla uno de los siguientes códigos o varios de ellos

           Por ejemplo: 

          
Serial.print("^(v)");

          
Equivale al CTRL-V del teclado físico, o sea, el pegado del portapapeles.
           Para especificar teclas de repetición, use la estructura {key number}. Debe poner un espacio entre key y number. Por ejemplo, {LEFT 42} implica presionar la tecla FLECHA IZQUIERDA 42 veces; {h 10} implica presionar H 10 veces.     Serial.print("{H 10}");

           Serial2SendKeys debe arrancarse después de conectarse la placa que estemos usando para que pueda detectar el nuevo puerto serie generado, lo seleccionamos, así como los baudios. Despues clicamos en la ventana donde queremos que se ejecuten los comandos de tecla que enviemos por el serie.

            Por último, para un funcionamiento más estable es recomendable intercalar un pequeño delay(50) si dos envíos Serial.print son muy seguidos, así mismo, valorar usar velocidades mayores de 9600 baudios. 

            Un ejemplo práctico: Sensor de Gestos


Menu