FLProg + RemoteXY = Teclado inalámbrico para la computadora en su teléfono

Tuve una situación interesante en casa. El televisor en la habitación está conectado a una computadora ubicada en otra habitación, y para que mi esposa vea el próximo episodio de la serie (aunque tengo un decodificador de Android, que está al lado del televisor, ella prefiere mirar desde una computadora), tengo que hacer un gran esfuerzo. Debido a la presencia de niños, los ratones y teclados inalámbricos no se arraigan aquí. He estado observando con interés durante mucho tiempo la capacidad de Arduino Leonardo de pretender ser un mouse y un teclado, y cuando se me ocurrió esta placa, implementé esta característica en el programa FLProg versión 2.2. Junto con las capacidades del proyecto RevoteXY, resultó algo muy interesante. Para iniciar el video del dispositivo resultante.



En primer lugar, se crea un proyecto en el sitio web RemoteXY. La peculiaridad de este proyecto es que la interfaz que creó no necesita cargarse en el teléfono. Es suficiente tener el programa RemoteXY en el teléfono, y todas las interfaces creadas se almacenan en el firmware de Arduino. Cuando se conecta a él, la descripción de la interfaz se transmite al teléfono y se abre en el programa.

Ahora en el sitio web RemoteXY hay una oportunidad para compartir sus proyectos, y aquí hay un enlace a mi proyecto para el dispositivo que se analiza en esta lección. El proyecto consta de cuatro pantallas.

La primera pantalla es el control del mouse.



Use el joystick para controlar el movimiento del mouse. El control con él es muy similar al control con la ayuda de lo que sobresalía en el medio del teclado en el famoso ThinkPad T41.



He tenido esto durante mucho tiempo, así que tengo experiencia. Los desarrolladores del proyecto RemoteXY prometieron hacer un nuevo elemento: el "Panel táctil", con la ayuda del cual será posible simular completamente el panel táctil de la computadora portátil. Cuando esto suceda en este proyecto, reemplazaré el joystick con él. El control deslizante en el lado derecho de la pantalla simula una rueda de desplazamiento. Cuanto más fuerte sea su desplazamiento desde el centro, más rápido girará la rueda del mouse virtual.

Tres columnas de botones en el lado izquierdo de la pantalla simulan diferentes clics en los botones virtuales del mouse. Cada columna es responsable de su botón: izquierda, centro y derecha, respectivamente. La fila superior de botones (con el símbolo "P") simula una presión normal. Es decir, cuando hace clic en este botón, se presionará el botón correspondiente del mouse virtual, cuando se suelte, se soltará. La segunda fila (con el símbolo "PF"): simula un clic con un pestillo. La primera vez que presione este botón, se presionará el botón virtual del mouse y el segundo se soltará. Esto es útil al arrastrar ventanas, por ejemplo. Apuntó con el mouse al título de la ventana, hizo clic en el botón "PF" (arregló la ventana al mouse), arrastró la ventana, volvió a hacer clic en "PF" (soltó la ventana). Bueno, la tercera fila (con el símbolo "C") es un clic en el botón correspondiente del mouse virtual.

La segunda pantalla es el teclado en inglés.



Especialmente no hay nada que explicar. El botón "Mayúsculas" habilita caracteres en mayúsculas, el botón "Shft" incluye caracteres en mayúsculas por carácter. Después de ingresar un carácter, se restablece.

La tercera pantalla es el teclado ruso



. Aquí todo está claro. Las teclas "Mayús" y "Mayús" funcionan igual que en la pantalla anterior.

Bueno, la última pantalla: números y caracteres especiales.



Hay una ligera sutileza. Hubo un pequeño error en el editor en línea de RemoteXY. Si se utiliza el símbolo "\" en el título del botón, el proyecto no se guarda y no se procesa. Por lo tanto, para el botón de este símbolo, utilicé la inscripción "no /". Bueno, no se me ocurrió nada mejor.

Después de crear el proyecto en el sitio web RemoteXY, debe obtener el código para descargarlo en el bloque "RemoteXY" en el proyecto FLProg. Para hacer esto, en las propiedades del proyecto RemoteXY, seleccione el entorno de programación - FLProg.



El código obtenido en el sitio RemoteXY para esta lección
REMOTEXY_MODE__SOFTSERIAL
REMOTEXY_SERIAL_RX 8
REMOTEXY_SERIAL_TX 9
REMOTEXY_SERIAL_SPEED 9600
[128,5,144,5,6,8,4,5,32,41
,11,47,47,7,1,4,48,92,11,7
,50,7,1,1,1,1,18,12,12,7
,1,80,0,1,1,14,18,12,12,7
,1,80,0,1,1,27,18,12,12,7
,1,80,0,1,1,1,32,12,12,7
,1,80,70,0,1,1,14,32,12,12
,7,1,80,70,0,1,1,27,32,12
,12,7,1,80,70,0,1,1,1,47
,12,12,7,1,67,0,1,1,14,47
,12,12,7,1,67,0,1,1,27,47
,12,12,7,1,67,0,1,1,1,22
,8,8,6,2,81,0,1,1,10,22
,8,8,6,2,87,0,1,1,19,22
,8,8,6,2,69,0,1,1,28,22
,8,8,6,2,82,0,1,1,37,22
,8,8,6,2,84,0,1,1,46,22
,8,8,6,2,89,0,1,1,55,22
,8,8,6,2,85,0,1,1,64,22
,8,8,6,2,73,0,1,1,73,22
,8,8,6,2,79,0,1,1,82,22
,8,8,6,2,80,0,1,1,1,31
,8,8,6,2,65,0,1,1,10,31
,8,8,6,2,83,0,1,1,19,31
,8,8,6,2,68,0,1,1,28,31
,8,8,6,2,70,0,1,1,37,31
,8,8,6,2,71,0,1,1,46,31
,8,8,6,2,72,0,1,1,55,31
,8,8,6,2,74,0,1,1,64,31
,8,8,6,2,75,0,1,1,1,40
,8,8,6,2,90,0,1,1,10,40
,8,8,6,2,88,0,1,1,19,40
,8,8,6,2,67,0,1,1,28,40
,8,8,6,2,86,0,1,1,37,40
,8,8,6,2,66,0,1,1,46,40
,8,8,6,2,78,0,1,1,55,40
,8,8,6,2,77,0,1,1,1,49
,98,13,6,2,0,1,1,73,31,8
,8,6,2,76,0,1,1,91,22,8
,8,6,2,60,0,1,1,82,31,17
,17,6,2,69,110,116,101,114,0,1
,1,64,40,8,8,6,2,44,0,1
,1,73,40,8,8,6,2,46,0,1
,1,1,16,17,5,6,2,83,104,105
,102,116,0,1,1,7,10,11,5,6
,2,67,97,112,115,0,1,1,1,25
,7,7,0,3,208,153,0,1,1,8
,25,7,7,0,3,208,166,0,1,1
,15,25,7,7,0,3,208,163,0,1
,1,22,25,7,7,0,3,208,154,0
,1,1,29,25,7,7,0,3,208,149
,0,1,1,43,25,7,7,0,3,208
,147,0,1,1,57,25,7,7,0,3
,208,169,0,1,1,78,25,7,7,0
,3,208,170,0,1,1,36,25,7,7
,0,3,208,157,0,1,1,64,25,7
,7,0,3,208,151,0,1,1,71,25
,7,7,0,3,208,165,0,1,1,50
,25,7,7,0,3,208,168,0,1,1
,86,25,13,7,0,3,60,0,1,1
,1,49,98,13,0,3,0,1,1,1
,41,7,7,0,3,208,175,0,1,1
,9,41,7,7,0,3,208,167,0,1
,1,17,41,7,7,0,3,208,161,0
,1,1,25,41,7,7,0,3,208,156
,0,1,1,33,41,7,7,0,3,208
,152,0,1,1,41,41,7,7,0,3
,208,162,0,1,1,49,41,7,7,0
,3,208,172,0,1,1,57,41,7,7
,0,3,208,145,0,1,1,65,41,7
,7,0,3,208,174,0,1,1,1,33
,7,7,0,3,208,164,0,1,1,9
,33,7,7,0,3,208,171,0,1,1
,17,33,7,7,0,3,208,146,0,1
,1,25,33,7,7,0,3,208,144,0
,1,1,33,33,7,7,0,3,208,159
,0,1,1,41,33,7,7,0,3,208
,160,0,1,1,49,33,7,7,0,3
,208,158,0,1,1,57,33,7,7,0
,3,208,155,0,1,1,65,33,7,7
,0,3,208,148,0,1,1,73,33,7
,7,0,3,208,150,0,1,1,81,33
,7,7,0,3,208,173,0,1,1,73
,41,7,7,0,3,44,0,1,1,81
,41,7,7,0,3,46,0,1,1,89
,33,10,15,0,3,69,110,116,101,114
,0,1,1,7,13,11,5,0,3,67
,97,112,115,0,1,1,1,19,17,5
,0,3,83,104,105,102,116,0,1,1
,1,13,9,8,5,4,49,0,1,1
,11,13,9,8,5,4,50,0,1,1
,21,13,9,8,5,4,51,0,1,1
,41,13,9,8,5,4,53,0,1,1
,51,13,9,8,5,4,54,0,1,1
,61,13,9,8,5,4,55,0,1,1
,91,13,9,8,5,4,48,0,1,1
,81,13,9,8,5,4,57,0,1,1
,71,13,9,8,5,4,56,0,1,1
,31,13,9,8,5,4,52,0,1,1
,32,49,68,13,5,4,0,1,1,51
,40,9,8,5,4,60,0,1,1,61
,40,9,8,5,4,39,0,1,1,71
,40,9,8,5,4,34,0,1,1,1
,31,9,8,5,4,95,0,1,1,91
,22,9,8,5,4,60,60,0,1,1
,41,40,9,8,5,4,62,0,1,1
,31,40,9,8,5,4,125,0,1,1
,21,40,9,8,5,4,123,0,1,1
,11,40,9,8,5,4,93,0,1,1
,1,40,9,8,5,4,91,0,1,1
,51,22,9,8,5,4,38,0,1,1
,61,31,9,8,5,4,124,0,1,1
,51,31,9,8,5,4,110,111,116,47
,0,1,1,41,31,9,8,5,4,47
,0,1,1,31,31,9,8,5,4,61
,0,1,1,21,31,9,8,5,4,45
,0,1,1,11,31,9,8,5,4,43
,0,1,1,71,31,9,8,5,4,63
,0,1,1,1,22,9,8,5,4,33
,0,1,1,11,22,9,8,5,4,64
,0,1,1,21,22,9,8,5,4,35
,0,1,1,31,22,9,8,5,4,36
,0,1,1,41,22,9,8,5,4,94
,0,1,1,61,22,9,8,5,4,42
,0,1,1,71,22,9,8,5,4,40
,0,1,1,81,22,9,8,5,4,41
,0,1,1,81,40,9,8,5,4,44
,0,1,1,91,40,9,8,5,4,46
,0,1,1,91,31,9,8,5,4,69
,110,116,101,114,0,1,1,81,31,9
,8,5,4,37,0,1,1,1,49,9
,8,5,4,58,0,1,1,11,49,9
,8,5,4,59,0,1,1,21,49,9
,8,5,4,126,0,65,10,1,10,5
,5,2,2,65,10,1,13,5,5,2
,3,65,9,1,1,5,5,2,2,65
,9,1,1,5,5,2,3,65,9,1
,1,5,5,2,4,131,1,82,1,17
,6,7,1,77,111,117,115,101,0,131
,0,64,1,17,6,6,2,69,110,0
,131,0,46,1,17,6,0,3,208,160
,209,131,209,129,0,131,0,28,1,17
,6,5,4,49,46,46,57,0];
input signed char joystick_1_x; /* =-100..100 x */
input signed char joystick_1_y; /* =-100..100 y */
input signed char slider_1; /* =-100..100 */
input unsigned char pressL; /* =1 , =0 */
input unsigned char PressM; /* =1 , =0 */
input unsigned char PressR; /* =1 , =0 */
input unsigned char pressLF; /* =1 , =0 */
input unsigned char pressMF; /* =1 , =0 */
input unsigned char pressRF; /* =1 , =0 */
input unsigned char ClickL; /* =1 , =0 */
input unsigned char ClickM; /* =1 , =0 */
input unsigned char ClickR; /* =1 , =0 */
input unsigned char bQ; /* =1 , =0 */
input unsigned char bW; /* =1 , =0 */
input unsigned char bE; /* =1 , =0 */
input unsigned char bR; /* =1 , =0 */
input unsigned char bT; /* =1 , =0 */
input unsigned char bY; /* =1 , =0 */
input unsigned char bU; /* =1 , =0 */
input unsigned char bI; /* =1 , =0 */
input unsigned char bO; /* =1 , =0 */
input unsigned char bP; /* =1 , =0 */
input unsigned char bA; /* =1 , =0 */
input unsigned char bS; /* =1 , =0 */
input unsigned char bD; /* =1 , =0 */
input unsigned char bF; /* =1 , =0 */
input unsigned char bG; /* =1 , =0 */
input unsigned char bH; /* =1 , =0 */
input unsigned char bJ; /* =1 , =0 */
input unsigned char bK; /* =1 , =0 */
input unsigned char bZ; /* =1 , =0 */
input unsigned char bX; /* =1 , =0 */
input unsigned char bC; /* =1 , =0 */
input unsigned char bV; /* =1 , =0 */
input unsigned char bB; /* =1 , =0 */
input unsigned char bN; /* =1 , =0 */
input unsigned char bM; /* =1 , =0 */
input unsigned char bSpace; /* =1 , =0 */
input unsigned char bL; /* =1 , =0 */
input unsigned char bBacspace; /* =1 , =0 */
input unsigned char bEnter; /* =1 , =0 */
input unsigned char bZap; /* =1 , =0 */
input unsigned char bTochka; /* =1 , =0 */
input unsigned char ShiftEn; /* =1 , =0 */
input unsigned char CapsEn; /* =1 , =0 */
input unsigned char bQR; /* =1 , =0 */
input unsigned char bWR; /* =1 , =0 */
input unsigned char bER; /* =1 , =0 */
input unsigned char bRR; /* =1 , =0 */
input unsigned char bTR; /* =1 , =0 */
input unsigned char bUR; /* =1 , =0 */
input unsigned char bOR; /* =1 , =0 */
input unsigned char bTverdR; /* =1 , =0 */
input unsigned char bYR; /* =1 , =0 */
input unsigned char bPR; /* =1 , =0 */
input unsigned char bXXR; /* =1 , =0 */
input unsigned char bIR; /* =1 , =0 */
input unsigned char bBacspaceR; /* =1 , =0 */
input unsigned char bSpaceR; /* =1 , =0 */
input unsigned char bZR; /* =1 , =0 */
input unsigned char bXR; /* =1 , =0 */
input unsigned char bCR; /* =1 , =0 */
input unsigned char bVR; /* =1 , =0 */
input unsigned char bBR; /* =1 , =0 */
input unsigned char bNR; /* =1 , =0 */
input unsigned char bMR; /* =1 , =0 */
input unsigned char bRusBR; /* =1 , =0 */
input unsigned char bRusUR; /* =1 , =0 */
input unsigned char bAR; /* =1 , =0 */
input unsigned char bSR; /* =1 , =0 */
input unsigned char bDR; /* =1 , =0 */
input unsigned char bFR; /* =1 , =0 */
input unsigned char bGR; /* =1 , =0 */
input unsigned char bHR; /* =1 , =0 */
input unsigned char bJR; /* =1 , =0 */
input unsigned char bKR; /* =1 , =0 */
input unsigned char bLR; /* =1 , =0 */
input unsigned char bRusGR; /* =1 , =0 */
input unsigned char bRusER; /* =1 , =0 */
input unsigned char bZapR; /* =1 , =0 */
input unsigned char bTochkaR; /* =1 , =0 */
input unsigned char bEnterR; /* =1 , =0 */
input unsigned char CapsRus; /* =1 , =0 */
input unsigned char ShiftRus; /* =1 , =0 */
input unsigned char bNum1; /* =1 , =0 */
input unsigned char bNum2; /* =1 , =0 */
input unsigned char bNum3; /* =1 , =0 */
input unsigned char bNum5; /* =1 , =0 */
input unsigned char bNum6; /* =1 , =0 */
input unsigned char bNum7; /* =1 , =0 */
input unsigned char bNum0; /* =1 , =0 */
input unsigned char bNum9; /* =1 , =0 */
input unsigned char bNum8; /* =1 , =0 */
input unsigned char bNum4; /* =1 , =0 */
input unsigned char bSpaceSim; /* =1 , =0 */
input unsigned char bSim24; /* =1 , =0 */
input unsigned char bSim25; /* =1 , =0 */
input unsigned char bSim26; /* =1 , =0 */
input unsigned char bSim10; /* =1 , =0 */
input unsigned char bBacspaceSim; /* =1 , =0 */
input unsigned char bSim23; /* =1 , =0 */
input unsigned char bSim22; /* =1 , =0 */
input unsigned char bSim21; /* =1 , =0 */
input unsigned char bSim20; /* =1 , =0 */
input unsigned char bSim19; /* =1 , =0 */
input unsigned char bSim6; /* =1 , =0 */
input unsigned char bSim16; /* =1 , =0 */
input unsigned char bSim15; /* =1 , =0 */
input unsigned char bSim14; /* =1 , =0 */
input unsigned char bSim13; /* =1 , =0 */
input unsigned char bSim12; /* =1 , =0 */
input unsigned char bSim11; /* =1 , =0 */
input unsigned char bSim17; /* =1 , =0 */
input unsigned char bSim1; /* =1 , =0 */
input unsigned char bSim2; /* =1 , =0 */
input unsigned char bSim3; /* =1 , =0 */
input unsigned char bSim4; /* =1 , =0 */
input unsigned char bSim5; /* =1 , =0 */
input unsigned char bSim7; /* =1 , =0 */
input unsigned char bSim8; /* =1 , =0 */
input unsigned char bSim9; /* =1 , =0 */
input unsigned char bSim27; /* =1 , =0 */
input unsigned char bSim28; /* =1 , =0 */
input unsigned char bEnterSim; /* =1 , =0 */
input unsigned char bSim18; /* =1 , =0 */
input unsigned char bSim29; /* =1 , =0 */
input unsigned char bSim30; /* =1 , =0 */
input unsigned char bSim31; /* =1 , =0 */
output unsigned char IsShiftEn_g; /* =0..255 */
output unsigned char IsShiftRus_g; /* =0..255 */
output unsigned char hasEngSim_b; /* =0..255 */
output unsigned char hasRusSim_b; /* =0..255 */
output unsigned char hasSpecSim_b; /* =0..255 */

Hemos terminado con el sitio web RemoteXY. Pasamos al proyecto en FLProg.

Los controladores Arduino Leonardo (marcado), Arduino DUE (el soporte para este controlador apareció a partir de la versión 2.3 - verificado), y Arduino Micro (en teoría, no han llegado, estoy esperando comprobarlo) pueden pretender ser un mouse y teclado estándar (es decir, que no requieren controladores especiales); .

El proyecto FLProg para esta lección se puede descargar aquí . El módulo bluetooth HC-05 se utiliza como dispositivo de comunicación con el teléfono. Está conectado de acuerdo con la tabla.
Módulo HC-051Arduino leonardo
Vcc+ 5V
GNDGND
TXDD0 (RX1)
RXDD1 (TX1)

Considere el proyecto:



hay una unidad "RemoteXY" muy grande que proporciona comunicación con el teléfono. Para configurarlo, debe descargar el código recibido del sitio del proyecto RemoteXY. El proceso de carga se describe en detalle en la información del bloque (propiedades del bloque -> pestaña "Información"), por lo tanto no lo duplicaremos aquí. Solo noto para aquellos que trabajan en la versión FLProg 2.3 y anteriores. Hay un pequeño error en estas versiones. Si, al crear un proyecto en el sitio web RemoteXY, en la configuración, selecciona un puerto que está ausente o está ocupado en el proyecto donde se cargará la descripción, entonces el programa se bloqueará al cargar. Para evitar esto, primero debe seleccionar un puerto libre en la configuración del bloque y luego cargar la descripción. En versiones posteriores de FLProg, este error se corrige.

Los bloques CD (codificador) se utilizan para determinar el número del botón presionado. Dan en su salida el número de entrada en el que apareció el lógico 1. En ausencia de un registro. 1 en todas las entradas, en la salida de este bloque 0.



Aquí, a partir de los datos recibidos del teléfono, detectamos la dirección de movimiento del mouse y la rueda. Elegí 5 unidades de banda muerta (con un cambio máximo en la señal del joystick y el control deslizante 0-100 en cada dirección). En principio, para mejorar el trabajo con el mouse, este valor se puede jugar. El tamaño del paso también se determina aquí (velocidad del movimiento del mouse o desplazamiento). Los parámetros de bloque "Escalar" también se pueden reproducir para un control más cómodo del mouse.



Aquí enviamos comandos directamente para mover el mouse virtual. Para hacer esto, use el nuevo bloque "Movimiento del mouse". Cada uno de los bloques envía un comando para mover el mouse en una dirección determinada cada 10 ms (establecido en la configuración del bloque), por un paso calculado en el tablero anterior si hay un nivel alto en la entrada "Enviar".



El nuevo bloque "Rueda del mouse" también se utiliza aquí. Ese bloque envía un comando para rotar la rueda de desplazamiento del mouse virtual. Aquí, para lograr un efecto suave, se utiliza un principio diferente (diferente de mover el mouse). Si hay un nivel alto en la entrada "Enviar", la unidad envía al mouse virtual un comando para girar la rueda de desplazamiento un paso, pero con una frecuencia calculada en el tablero 2. Esta frecuencia depende de la posición del control deslizante en el teléfono y cambia de 200 milisegundos a 5 milisegundos cuando el valor cambia recibido del control deslizante de 5 (zona muerta) a 100 (posición extrema).



Aquí se usa el bloque "MousePressKey". En un nivel alto en la entrada "Enviar", mantiene presionado el botón virtual del mouse seleccionado en la configuración, en un nivel bajo lo suelta. Para darse cuenta del efecto de presionar con fijación, se utilizan disparadores TT (disparadores de conteo). En el primer borde de ataque en su entrada, traducen su salida a un estado de registro. 1 y en el segundo lo bajan a 0. Y así en un círculo.



Aquí usamos el bloque "MouseClickKey", que, en el borde ascendente de la entrada "Enviar", hace un breve clic en el botón virtual del mouse seleccionado en la configuración del bloque.



Aquí, se utilizan los bloques "KeyboardStatus" y "MouseStatus" que, cuando la entrada de estado es alta, encienden el teclado virtual y el mouse, respectivamente, y los apagan cuando el nivel es bajo. En este esquema, para controlar el encendido y apagado, la señal es la presencia de una conexión telefónica con un arduino. Se forma en la salida "CS" del bloque "RemoteXY" (placa 1). Además, si hay una conexión, encendemos el LED integrado en la placa arduino (pin 13).



Aquí, se determina el hecho de presionar un botón en uno de los teclados en la aplicación en el teléfono, y en qué teclado en particular se presionó el botón: ruso o inglés. Además, se generan señales para encender el LED ubicado en la esquina superior derecha de cada uno de los teclados de la aplicación en el teléfono. Este LED indica que la señal de presión del botón ha llegado al controlador. Lo usé durante la configuración, pero decidí dejarlo en la versión final de la aplicación.



Esto determina si se debe ingresar un carácter en mayúscula. La ventaja de presionar el botón "Shift" en la aplicación en el teléfono establece el disparador SR en el estado de registro. Después del final de la entrada de caracteres (borde posterior de la señal de la presencia del carácter presionado), el disparador se restablece a 0.
Cada vez que presiona el botón "Caps" en la aplicación del teléfono, se invierte el funcionamiento del botón "Shift". Es decir, en la posición inicial, el estado de entrada principal son caracteres en minúscula, y cuando presiona el botón "Shift", se ingresa un carácter en mayúscula, luego de presionar el botón "Caps" una vez, el modo cambia. Las letras mayúsculas se convierten en las principales, y cuando presiona el botón "Shift", se ingresa un carácter en minúscula. Cuando se presiona nuevamente el botón "Caps", la entrada cambia al modo principal. Además, se genera una señal para encender el indicador "Shift" en la aplicación del teléfono.



Aquí, a partir del número presionado en el teclado en la aplicación en el teléfono del botón, se forma el código de símbolo de este botón. Esto se hace usando el bloque "Tabla de códigos". Este bloque genera un código en la salida "Q", cuyo número en la tabla cargada en el bloque corresponde al valor en la entrada "I".

La tabla de códigos se carga en el bloque "Tabla de códigos" en esta placa.
113q
119w
101e
114r
116t
121y
117u
105i
111o
112p
97a
115s
100d
102f
103g
104h
106j
107k
108l
122z
120x
99c
118v
98b
110n
109m
91[
93]
59
39'
44,
46.


Tenga en cuenta que tanto los caracteres rusos como los ingleses usan la misma tabla de códigos. El hecho es que la biblioteca Keybord solo comprende códigos de un byte, y en realidad presiona un botón en el teclado virtual en el que se escribe un símbolo con el código que se le pasa. Para ingresar caracteres rusos, el método de entrada en la computadora cambia por la fuerza al ruso cuando se ingresan. Consideraremos cómo se hace esto en la próxima tabla.



Aquí se utilizan dos bloques "SequenceKeybord". Estos bloques en el borde ascendente en la entrada "Enviar" ejecutan un script de acción del teclado que se configuró cuando se configuró el bloque. Es con este bloque que podemos configurar la entrada de caracteres rusos o ingleses, así como cambiar caracteres en minúsculas o mayúsculas. Pero esto también requiere alguna configuración de la computadora a la que está conectado nuestro dispositivo. Debe configurar un método abreviado de teclado para habilitar los diseños rusos y angdianos. Esto se hace en el panel de control de la computadora.







Para este dispositivo, configuré la inclusión de inglés usando las teclas CTRL + 1 y CTRL + 0 ruso. Son estas combinaciones las que se usan en los bloques de script.
Considere un escenario de bloque superior.



El script se ejecuta en pasos de arriba a abajo en el borde ascendente en la entrada "Enviar" (cuando aparece la señal de la presencia de un carácter presionado en el teclado de la aplicación en el teléfono). En el primer paso, el botón CTRL se presiona y se mantiene en el teclado virtual. En el segundo paso, se presiona brevemente el botón, el código se alimenta a la entrada "Paso 2 del código". Si se presionó la tecla en el teclado ruso, será 48 (código de caracteres 1) y si está en inglés - 49 (código de caracteres 0). En el tercer paso, se suelta el botón CTRL. Por lo tanto, cambiamos el idioma de entrada al que necesitamos para ingresar este carácter.

El siguiente paso depende del alto nivel de la entrada "Actividad Paso 4". Ocurre cuando el modo de capitalización está activo. En este caso, se realiza el paso 4 y se mantiene presionado el botón "Shift" en el teclado virtual. De esta manera, se ingresan caracteres en mayúscula.

Bueno, en el último paso, se presiona y se mantiene presionado el botón del teclado virtual, el código que viene a la entrada "Code Step 5" (el código del botón que presionamos en el teclado en la aplicación del teléfono).

Si la señal de que se presiona un botón en el teclado en la aplicación en el teléfono desaparece debido a la inversión en la entrada del bloque inferior del script, se ejecuta el script configurado en él.



Primero, soltamos el botón de símbolo previamente presionado, y luego soltamos el botón "Shift"



Aquí, de manera similar a la placa 10, generamos una señal sobre la presencia de un botón presionado en el teclado para caracteres y números especiales en la aplicación en el teléfono, y el código para este botón.

La tabla de códigos se carga en el bloque "Tabla de códigos" en esta placa.
44,
44,
46.
46.
178BACKSPACE
178BACKSPACE
178BACKSPACE
32«»
32«»
32«»
176RETURN
176RETURN
176RETURN
491
502
513
524
535
546
557
568
579
480
33!
64@
35#
36$
94^
38&
42*
40(
41)
95_
43+
45-
61=
47/
92\
124|
63?
37%
91[
93]
123{
125}
62>
60<
39'
34"
44,
46.
58:
59
126~




Cuando aparece una señal de que se presiona una tecla especial en el teclado en la aplicación del teléfono, se ejecuta el script configurado en el bloque "SequenceKeyboard". En él, primero traducimos el método de entrada al inglés (presionando la tecla "CTRL" → presionando la tecla "1" → soltando la tecla "CTRL"), y luego presionamos la tecla de caracteres deseada. Si desaparece la presencia del botón presionado, se ejecuta una unidad de exposición única al teclado "OneKeyboard" que realiza una acción programada en la configuración. En este caso, suelta la tecla de caracteres especiales previamente presionada.

Después de la compilación, este proyecto ocupa un poco más de la mitad de la memoria del controlador Arduino Leonardo, lo que permite varias modificaciones de este proyecto.
Buena suerte con tu creatividad.

Source: https://habr.com/ru/post/es400655/


All Articles