FLProg + RemoteXY = Clavier sans fil pour l'ordinateur de votre téléphone

J'avais une situation intéressante à la maison. Le téléviseur dans la chambre est connecté à un ordinateur situé dans une autre pièce, et pour que ma femme regarde le prochain épisode de la série (bien que j'ai un décodeur Android, qui est à côté du téléviseur, elle préfère regarder depuis un ordinateur), je dois faire beaucoup d'efforts. En raison de la présence d'enfants, les souris et claviers sans fil ne prennent pas racine ici. Pendant longtemps, j'ai étudié avec intérêt la capacité de l'Arduino Leonardo à faire semblant d'être une souris et un clavier, et lorsque cette carte est venue à moi, j'ai réalisé cette opportunité dans le programme FLProg version 2.2. Avec les capacités du projet RevoteXY, une chose très intéressante s'est avérée. Pour démarrer la vidéo de l'appareil résultant.



Tout d'abord, un projet est créé sur le site RemoteXY. La particularité de ce projet est que l'interface que vous avez créée n'a pas besoin d'être chargée sur le téléphone. Il suffit d'avoir le programme RemoteXY sur le téléphone, et toutes les interfaces créées sont stockées dans le firmware Arduino. Une fois connecté, la description de l'interface est transmise au téléphone et s'ouvre dans le programme.

Maintenant, sur le site Web de RemoteXY, il est possible de partager leurs projets, et voici un lien vers mon projet pour le périphérique discuté dans cette leçon. Le projet se compose de quatre écrans.

Le premier écran est le contrôle de la souris.



Utilisez le joystick pour contrôler le mouvement de la souris. Le contrôle avec lui est très similaire au contrôle à l'aide de la chose qui se trouvait au milieu du clavier sur le célèbre ThinkPad T41.



Je l'ai depuis longtemps, j'ai donc de l'expérience. Les développeurs du projet RemoteXY ont promis de créer un nouvel élément - le «Touch Panel», avec lequel vous pouvez simuler complètement le pavé tactile de l'ordinateur portable. Lorsque cela se produit dans ce projet, je remplacerai le joystick par celui-ci. Le curseur sur le côté droit de l'écran simule une molette de défilement. Plus son décalage par rapport au centre est fort, plus la roue de la souris virtuelle tournera rapidement.

Trois colonnes de boutons sur le côté gauche de l'écran simulent différents clics sur les boutons de la souris virtuelle. Chaque colonne est responsable de son bouton - gauche, milieu et droite, respectivement. La rangée supérieure de boutons (avec le symbole «P») simule une pression normale. Autrement dit, lorsque vous cliquez sur ce bouton, le bouton correspondant de la souris virtuelle sera enfoncé, une fois relâché, il est relâché. La deuxième ligne (avec le symbole «PF») - simule un clic avec un verrou. La première fois que vous appuyez sur ce bouton, le bouton de la souris virtuelle sera enfoncé et le second - relâché. C'est utile lorsque vous faites glisser des fenêtres par exemple. Pointe la souris sur le titre de la fenêtre, clique sur le bouton "PF" (fixe la fenêtre à la souris), fait glisser la fenêtre, clique à nouveau sur "PF" (relâche la fenêtre). Eh bien, la troisième ligne (avec le symbole «C») est un clic sur le bouton correspondant de la souris virtuelle.

Le deuxième écran est le clavier anglais.



Il n'y a surtout rien à expliquer. Le bouton «Caps» active les caractères majuscules, le bouton «Shft» inclut les caractères majuscules par caractère. Après avoir entré un caractère, il est réinitialisé.

Le troisième écran est le clavier russe,



tout est clair ici. Les touches «Caps» et «Shift» fonctionnent de la même manière que sur l'écran précédent.

Eh bien, le dernier écran - les chiffres et les caractères spéciaux.



Il y a une légère subtilité. Il y avait un petit bogue dans l'éditeur en ligne de RemoteXY. Si le symbole «\» est utilisé dans la légende du bouton, le projet n'est pas enregistré et n'est pas traité. Par conséquent, pour le bouton de ce symbole, j'ai utilisé l'inscription «non /». Eh bien, je n’ai rien trouvé de mieux.

Après avoir créé le projet sur le site Web de RemoteXY, vous devez obtenir le code à télécharger dans le bloc «RemoteXY» du projet FLProg. Pour ce faire, dans les propriétés du projet RemoteXY, sélectionnez l'environnement de programmation - FLProg.



Le code obtenu sur le site RemoteXY pour cette leçon
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 */

Nous avons terminé avec le site Web RemoteXY. Nous passons au projet sur FLProg.

Les contrôleurs Arduino Leonardo (vérifiés), Arduino DUE (la prise en charge de ce contrôleur est apparu à partir de la version 2.3 - vérifié) et Arduino Micro (théoriquement, ne sont pas encore arrivés, j'attends de vérifier) ​​peuvent prétendre être une souris et un clavier standard (c'est-à-dire ne nécessitant pas de pilotes spéciaux); .

Le projet FLProg pour cette leçon peut être téléchargé ici . Le module Bluetooth HC-05 est utilisé comme appareil de communication avec le téléphone. Il est connecté conformément au tableau.
Module HC-051Arduino leonardo
Vcc+ 5V
GNDGND
TXDD0 (RX1)
RXDD1 (TX1)

Considérez le projet:



il y a une très grande unité «RemoteXY» qui permet la communication avec le téléphone. Pour le configurer, vous devez y télécharger le code reçu du site du projet RemoteXY. Le processus de chargement est décrit en détail dans les informations du bloc (propriétés du bloc -> onglet «Informations»), nous ne le reproduirons donc pas ici. Je note uniquement pour ceux qui travaillent dans la version FLProg 2.3 et antérieure. Il y a un petit bug dans ces versions. Si, lors de la création d'un projet sur le site Web RemoteXY, dans les paramètres, sélectionnez un port absent ou occupé dans le projet où la description sera chargée, le programme se bloquera lors du chargement. Pour éviter cela, vous devez d'abord sélectionner un port libre dans les paramètres de bloc, puis charger la description. Dans les versions ultérieures de FLProg, cette erreur est corrigée.

Les blocs CD (encodeur) sont utilisés pour déterminer le numéro du bouton enfoncé. Ils donnent sur leur sortie le numéro d'entrée sur lequel est apparu le logique 1. En l'absence de journal. 1 à toutes les entrées, à la sortie de ce bloc 0.



Ici, à partir des données reçues du téléphone, on détecte le sens de déplacement de la souris et de la molette. J'ai choisi 5 unités de bande morte (avec un changement maximum dans le signal du joystick et du curseur 0-100 dans chaque direction). En principe, pour améliorer le travail avec la souris, cette valeur peut être lue. La taille du pas est également déterminée ici (vitesse de déplacement de la souris ou de défilement). Les paramètres de bloc «Scale» peuvent également être lus pour un contrôle plus confortable de la souris.



Ici, nous envoyons directement des commandes pour déplacer la souris virtuelle. Pour ce faire, utilisez le nouveau bloc "Déplacement souris". Chacun des blocs envoie une commande pour déplacer la souris dans une certaine direction toutes les 10 ms (définie dans les paramètres de bloc), par une étape calculée dans la carte précédente s'il y a un niveau élevé à l'entrée «Envoyer».



Le nouveau bloc «molette de la souris» est également utilisé ici. Ce bloc envoie une commande pour faire tourner la molette de défilement de la souris virtuelle. Ici, pour obtenir un effet fluide, un principe différent (différent du déplacement de la souris) est utilisé. S'il y a un niveau élevé à l'entrée «Envoyer», l'unité envoie à la souris virtuelle une commande pour tourner la molette de défilement d'un pas, mais avec une fréquence calculée sur la carte 2. Cette fréquence dépend de la position du curseur sur le téléphone et passe de 200 millisecondes à 5 millisecondes lorsque la valeur change reçu du curseur de 5 (zone morte) à 100 (position extrême).



Le bloc «MousePressKey» est utilisé ici. À un niveau élevé à l'entrée «Envoyer», il maintient le bouton de la souris virtuelle sélectionné dans les paramètres, à un niveau bas, il le relâche. Pour réaliser l'effet du pressage avec fixation, des déclencheurs TT (déclencheurs de comptage) sont utilisés. Sur le premier bord d'attaque à leur entrée, ils traduisent leur sortie dans un état de journal. 1 et dans la seconde, ils la déposent à 0. Et donc dans un cercle.



Ici, nous utilisons le bloc "MouseClickKey" qui, sur le front montant de l'entrée "Send", fait un bref clic sur le bouton de la souris virtuelle sélectionné dans les paramètres du bloc.



Ici, les blocs «KeyboardStatus» et «MouseStatus» sont utilisés qui, lorsque l'entrée Status est élevée, allument respectivement le clavier et la souris virtuels, et les désactivent lorsque le niveau est bas. Dans ce schéma, pour contrôler l'allumage et l'extinction, le signal est la présence d'une connexion téléphonique avec un arduino. Il est formé à la sortie «CS» du bloc «RemoteXY» (carte 1). De plus, s'il y a une connexion, nous allumons la LED intégrée à la carte Arduino (broche 13).



Ici, le fait d'appuyer sur un bouton sur l'un des claviers de l'application sur le téléphone est déterminé, et sur quel clavier particulier le bouton a été enfoncé - russe ou anglais. De plus, des signaux sont générés pour l'allumage de la LED située dans le coin supérieur droit de chacun des claviers d'application du téléphone. Cette LED indique que le signal de pression sur le bouton a atteint le contrôleur. Je l'ai utilisé lors de l'installation, mais j'ai décidé de le laisser dans la version finale de l'application.



Ceci détermine s'il faut entrer un caractère majuscule. Le bord avant d'appuyer sur le bouton "Shift" dans l'application sur le téléphone définit le déclencheur SR à l'état de log.1. Après la fin de la saisie de caractère (front arrière du signal de la présence du caractère pressé), le déclencheur est remis à 0.
Chaque pression sur le bouton "Caps" dans l'application sur le téléphone inverse le fonctionnement du bouton "Shift". Autrement dit, dans la position initiale, l'état d'entrée principal est en caractères minuscules, et lorsque vous appuyez sur le bouton "Shift", un caractère majuscule est entré, puis après avoir appuyé une fois sur le bouton "Caps", le mode change. Les lettres majuscules deviennent les principales et lorsque vous appuyez sur le bouton «Shift», un caractère minuscule est entré. Lorsque vous appuyez à nouveau sur le bouton «Caps», l'entrée passe en mode principal. De plus, un signal est généré pour allumer l'indicateur «Shift» dans l'application sur le téléphone.



Ici, à partir du numéro appuyé sur le clavier dans l'application sur le téléphone du bouton, le code symbole de ce bouton est formé. Cela se fait à l'aide du bloc «Table de codes» qui génère un code à la sortie «Q» dont le nombre dans la table chargée dans le bloc correspond à la valeur à l'entrée «I».

La table de codes est chargée dans le bloc «Table de codes» de cette carte.
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.


Veuillez noter que les caractères russes et anglais utilisent la même table de codes. Le fait est que la bibliothèque Keybord ne comprend que les codes à un octet et appuie en fait sur un bouton du clavier virtuel sur lequel un symbole est écrit avec le code qui lui est transmis. Pour saisir des caractères russes, la méthode de saisie sur l'ordinateur bascule de force vers le russe lors de leur saisie. Nous verrons comment cela se fera au prochain tableau.



Deux blocs «SequenceKeybord» sont utilisés ici. Ces blocs sur le front montant à l'entrée «Envoyer» exécutent un script d'action de clavier qui a été configuré lors de la configuration du bloc. C'est avec ce bloc que nous pouvons configurer la saisie de caractères russes ou anglais, ainsi que la commutation de caractères minuscules ou majuscules. Mais cela nécessite également une certaine configuration de l'ordinateur auquel notre appareil est connecté. Vous devez configurer un raccourci clavier pour activer les dispositions russes et angdiennes. Cela se fait dans le panneau de commande de l'ordinateur.







Pour cet appareil, j'ai configuré l'inclusion de l'anglais à l'aide des touches CTRL + 1 et russe CTRL + 0. Ce sont ces combinaisons qui sont utilisées dans les blocs de script.
Considérez un scénario de bloc supérieur.



Le script est exécuté par étapes de haut en bas sur le front montant à l'entrée «Envoyer» (lorsque le signal de la présence d'un caractère enfoncé sur le clavier de l'application dans le téléphone apparaît). À la première étape, le bouton CTRL est maintenu enfoncé sur le clavier virtuel. Dans la deuxième étape, une courte pression sur le bouton est effectuée, le code est envoyé à l'entrée «Code Step 2». Si la touche a été enfoncée sur le clavier russe, ce sera 48 (code de caractère 1) et si en anglais - 49 (code de caractère 0). Dans la troisième étape, le bouton CTRL est relâché. Ainsi, nous avons changé la langue d'entrée à celle dont nous avons besoin pour saisir ce caractère.

L'étape suivante dépend du niveau élevé de l'entrée «Étape d'activité 4». Cela se produit lorsque le mode de capitalisation est actif. Dans ce cas, l'étape 4 est effectuée et le bouton «Shift» du clavier virtuel est maintenu enfoncé. De cette façon, les caractères majuscules sont entrés.

Eh bien, à la dernière étape, le bouton du clavier virtuel est enfoncé et maintenu, le code qui vient à l'entrée "Code Step 5" (le code du bouton sur lequel nous avons appuyé sur le clavier dans l'application sur le téléphone).

Si le signal qu'un bouton est pressé sur le clavier dans l'application sur le téléphone disparaît en raison d'une inversion à l'entrée du bloc inférieur du script, le script configuré dans celui-ci est exécuté.



Tout d'abord, nous relâchons le bouton symbole précédemment enfoncé, puis relâchons le bouton «Shift»



Ici, de manière similaire à la carte 10, nous générons un signal sur la présence d'un bouton enfoncé sur le clavier pour les caractères spéciaux et les chiffres dans l'application sur le téléphone, et le code de ce bouton.

La table de codes est chargée dans le bloc «Table de codes» de cette carte.
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~




Lorsqu'un signal apparaît qu'une touche spéciale est pressée sur le clavier dans l'application sur le téléphone, le script configuré dans le bloc «SequenceKeyboard» est exécuté. Dans ce document, nous traduisons d'abord la méthode de saisie en anglais (en appuyant sur la touche «CTRL» → en appuyant sur la touche «1» → en relâchant la touche «CTRL»), puis en appuyant sur la touche de caractère souhaitée. Si la présence du bouton enfoncé disparaît, une unité d'exposition unique au clavier «OneKeyboard» est exécutée et effectue une action programmée dans les paramètres. Dans ce cas, relâche la touche de caractère spécial précédemment pressée.

Après compilation, ce projet occupe un peu plus de la moitié de la mémoire du contrôleur Arduino Leonardo, ce qui permet diverses modifications de ce projet.
Bonne chance avec votre créativité.

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


All Articles