Teclado Android

Aquí os traigo un proyecto de un teclado hecho para un Smartphone o tableta Android, y creo que también es para IPhone según lo que he visto por las redes.


La aplicación está hecha con “APP Inventor” que manda unos códigos numéricos a la placa “Pro Micro”, ya que lleva el incorporado el chip atmega32u4, que nos permite realizar las funciones de un teclado y ratón; que a través de un modulo Bluetooth y esta los manda al PC, Mac o Linux mediante cable USB.


Se trata de una aplicación de 6 grupos de 20 teclas y cada una de ellas la podemos programar a nuestras necesidades. En este caso el primer grupo son las teclas asociadas a Windows y Linux, la segunda son teclas especificas de Mac, la siguiente son para las teclas comunes a los tres sistemas, junto con sentencias de programación para no tener que estar buscando cada vez el uso de las mismas. En cuarto lugar, he intentado emular u ratón a modo de aprendizaje y ver su comportamiento, seguido de un teclado numérico y en último lugar he colocado los símbolos que requerimos en los distintos lenguajes de programación que a ciertas personas nos cuesta más teclearlas al requerir de las dos manos.


Junto a este escrito os dejare un fichero comprimido con el código fuente de la aplicación de arduino con las dos librerías modificadas para que reconozca al teclado español y el fichero de APP Inventor para que podáis ver el funcionamiento. Excepto el fichero da la aplicación del Smartphone, los otros tres ficheros han de estar en la misma carpeta. Cabe comentar que, si lo vais a usar en Mac, la primera tecla que habéis de presionar a la hora de que el sistema reconozca el teclado, es el símbolo “<”; de esta manera no perderéis la configuración del teclado principal.

Espero que os sea de utilidad y lo podáis adaptar para un uso más fluido en vuestro trabajo del día a día.

Materiales:

Protoboard
Arrduino Pro Micro
Bluetooth HC-05 o HC-06

Esquema de conexión:

Aplicación:

/*
 * Placa: Arduino Pro mocro, ya que tiene el chipset ATMEGA 32U4
 Módulo bluetooth HC05 o HC06
 */
#include <SoftwareSerial.h>
#include <Mouse.h>
#include "Keyboard.h"    // Esta es una biblioteca "incorporada" sin necesidad de instalar
#include <Wire.h>


SoftwareSerial rebre(8,9);  //8 = RX 9 = TX

int velocitat = 20;
int cadena;
int retard = 50;

void DecodificarSerial(){           //Procedimiento para extraer el número recibido
  String Mensaje = "";              //hasta encontrar "\n" el retorno de carro
    while (rebre.available() > 0){
        char c = rebre.read();
        if (c == '\n') {
          cadena = Mensaje.toInt();
          break; //recibido = true;
        }else{
            Mensaje += c;
        }
    }
}

void setup()
{

//inicializa la comunicacion serial
   Serial.begin(9600);
   rebre.begin(115200);      //rebre.begin(115200);
   Mouse.begin();

}

void loop(){
  cadena = 0;
  DecodificarSerial();


  if (cadena != 0){
    switch (cadena) {
      if(cadena <=0){                 //Primero conjunt de 20 teclas Windows
          case 1:
            Keyboard.press(KEY_LEFT_CTRL);
            Keyboard.press('x');
            delay(retard);
            Keyboard.releaseAll();
            Keyboard.end();
            break;
          case 2:
            Keyboard.press(KEY_LEFT_CTRL);
            Keyboard.press('c');
            delay(retard);
            Keyboard.releaseAll();
            Keyboard.end();
            break;
          case 3:
            Keyboard.press(KEY_LEFT_CTRL);
            Keyboard.press('v');
            delay(retard);
            Keyboard.releaseAll();
            Keyboard.end();
            break;
          case 4:
            Keyboard.press(KEY_LEFT_CTRL);
            Keyboard.press('p');
            delay(retard);
            Keyboard.releaseAll();
            Keyboard.end();
            break;
       }
      if(cadena >=21 && cadena<=40){         //Segundo 20 teclas para mac
          case 21:
            Keyboard.press(KEY_LEFT_GUI);
            Keyboard.press('x');
            delay(retard);
            Keyboard.releaseAll();
            Keyboard.end();
            break;
          case 22:
            Keyboard.press(KEY_LEFT_GUI);
            Keyboard.press('c');
            delay(retard);
            Keyboard.releaseAll();
            Keyboard.end();
            break;
          case 23:
            Keyboard.press(KEY_LEFT_GUI);
            Keyboard.press('v');
            delay(retard);
            Keyboard.releaseAll();
            Keyboard.end();
            break;
          case 24:
            Keyboard.press(KEY_LEFT_GUI);
            Keyboard.press('p');
            delay(retard);
            Keyboard.releaseAll();
            Keyboard.end();
            break;
          case 25:
            Keyboard.press(KEY_LEFT_GUI);
            Keyboard.press(KEY_LEFT_SHIFT);
            Keyboard.press('p');
            delay(retard);
            Keyboard.releaseAll();
            Keyboard.end();
            break;
      }
      if(cadena >=41 && cadena<=60){    //Tercero conjunto de 20 teclas Win i Mac
          case 41:               // For
            Keyboard.begin();
            Keyboard.print("for (int x = 2; x < 100; x = x * 1.5){");
            Keyboard.press(KEY_RETURN);
            delay(retard);
            Keyboard.print("   println(x);....");
            Keyboard.press(KEY_RETURN);
            delay(retard);
            Keyboard.print('}');
            Keyboard.press(KEY_RETURN);
            delay(retard);
            Keyboard.releaseAll();
            Keyboard.end();
            break;
          case 54:
            Keyboard.press(KEY_UP_ARROW);
            delay(retard);
            Keyboard.releaseAll();
            Keyboard.end();
            break;
          case 57:
            Keyboard.press(KEY_LEFT_ARROW);
            delay(retard);
            Keyboard.releaseAll();
            Keyboard.end();
            break;
          case 58:
            Keyboard.press(KEY_DOWN_ARROW);
            delay(retard);
            Keyboard.releaseAll();
            Keyboard.end();
            break;
          case 59:
            Keyboard.press(KEY_RIGHT_ARROW);
            delay(retard);
            Keyboard.releaseAll();
            Keyboard.end();
            break;
      }
      if(cadena >=61 && cadena<=80){                 //Cuarto Mouse
            Mouse.move(-10, -10, 0);
            delay(velocitat);
            break;
          case 62:
            Mouse.move(0, -10, 0);
            delay(velocitat);
            break;
          case 63:
            Mouse.move(10, -10, 0);
            delay(velocitat);
            break;
          case 64:
            Mouse.click(MOUSE_LEFT);
            Mouse.click(MOUSE_LEFT);
            delay(20);
            break;
          case 65:
            Mouse.move(-10, 0, 0);
            delay(velocitat);
            break;
          case 66:
            Mouse.press();
            break;
          case 67:
            Mouse.move(10, 0, 0);
            delay(velocitat);
            break;
          case 68:
            Mouse.click(MOUSE_RIGHT);
            delay(20);
            break;
          case 69:
            Mouse.move(-10, 10, 0);
            delay(velocitat);
            break;
          case 70:
            Mouse.move(0, 10, 0);
            delay(velocitat);
            break;
          case 71:
            Mouse.move(10, 10, 0);
            delay(20);
            break;
          case 72:
            Mouse.click(MOUSE_LEFT);
            delay(20);
            break;
          case 73:
            Mouse.move(0, 0, 1);
            break;
          case 74:
            Mouse.move(0, 0, -1);
            delay(80);
            break;
          case 75:
            Mouse.move(0, 0, 1);
            delay(80);
            break;
          case 76:
            Mouse.move(0, 0, -1);
            break;
          case 77:
            Mouse.release();
            break;
      }
      if(cadena >=81 && cadena<=104){         //Quinto Modo calculadora
            Keyboard.begin();
            Keyboard.write('7');
            Keyboard.end();
            delay(retard);
            break;
          case 86:
            Keyboard.begin();
            Keyboard.write('8');
            Keyboard.end();
            delay(retard);
            break;
          case 87:
            Keyboard.begin();
            Keyboard.write('9');
            Keyboard.end();
            delay(retard);
            break;
          case 89:
            Keyboard.begin();
            Keyboard.write('4');
            Keyboard.end();
            delay(retard);
            break;
          case 90:
            Keyboard.begin();
            Keyboard.write('5');
            Keyboard.end();
            delay(retard);
            break;
          case 91:
            Keyboard.begin();
            Keyboard.write('6');
            Keyboard.end();
            delay(retard);
            break;
          case 92:
            Keyboard.begin();
            Keyboard.write('-');
            Keyboard.end();
            delay(retard);
            break;
          case 93:
            Keyboard.begin();
            Keyboard.write('1');
            Keyboard.end();
            delay(retard);
            break;
          case 94:
            Keyboard.begin();
            Keyboard.write('2');
            Keyboard.end();
            delay(retard);
            break;
          case 95:
            Keyboard.begin();
            Keyboard.write('3');
            Keyboard.end();
            delay(retard);
            break;
          case 96:
            Keyboard.begin();
            Keyboard.write('+');
            Keyboard.end();
            delay(retard);
            break;
          case 98:
            Keyboard.begin();
            Keyboard.write('0');
            Keyboard.end();
            delay(retard);
            break;
          case 99:
            Keyboard.begin();
            Keyboard.write(',');
            Keyboard.end();
            delay(retard);
            break;
      }

      if(cadena >=101 && cadena<=120){         //Sexto conjunto de 20 caracteres
          case 101:
            Keyboard.begin();
            Keyboard.write('<');
            Keyboard.end();
            delay(retard);
            break;
          case 102:
            Keyboard.begin();
            Keyboard.write('>');
            Keyboard.end();
            delay(retard);
            break;
          case 103:
            Keyboard.begin();
            Keyboard.write('@');
            Keyboard.end();
            delay(retard);
            break;
          case 104:
            Keyboard.begin();
            Keyboard.write('=');
            Keyboard.end();
            delay(retard);
            break;
          case 105:
            Keyboard.begin();
            Keyboard.write('{');
            Keyboard.end();
            delay(retard);
            break;
          case 106:
            Keyboard.begin();
            Keyboard.write('}');
            Keyboard.end();
            delay(retard);
            break;
          case 107:
            Keyboard.begin();
            Keyboard.write('#');
            Keyboard.end();
            delay(retard);
            break;
          case 108:
            Keyboard.begin();
            Keyboard.write('&');
            Keyboard.end();
            delay(retard);
            break;
          case 109:
            Keyboard.begin();
            Keyboard.write('(');
            Keyboard.end();
            delay(retard);
            break;
          case 110:
            Keyboard.begin();
            Keyboard.write(')');
            Keyboard.end();
            delay(retard);
            break;
          case 111:
            Keyboard.begin();
            Keyboard.write('/');
            Keyboard.end();
            delay(retard);
            break;
          case 112:
            Keyboard.begin();
            Keyboard.write('%');
            Keyboard.end();
            delay(retard);
            break;
          case 113:
            Keyboard.begin();
            Keyboard.write('[');
            Keyboard.end();
            delay(retard);
            break;
          case 114:
            Keyboard.begin();
            Keyboard.write(']');
            Keyboard.end();
            delay(retard);
            break;
          case 115:
            Keyboard.begin();
            Keyboard.write('*');
            Keyboard.end();
            delay(retard);
            break;
          case 116:
            Keyboard.begin();
            Keyboard.write('?');
            Keyboard.end();
            delay(retard);
            break;
      }
    }
  }
}

Descarga de los ficheros:

No debes olvidar de incluir los tres ficheros en la misma carpeta.

Teclado Android: Descargas

Scroll al inicio