FLProg + RemoteXY = Drahtlose Tastatur für den Computer Ihres Telefons

Ich hatte eine interessante Situation zu Hause. Der Fernseher im Schlafzimmer ist mit einem Computer in einem anderen Raum verbunden. Damit meine Frau die nächste Folge der Serie sehen kann (obwohl ich eine Android-Set-Top-Box neben dem Fernseher habe, schaut sie lieber von einem Computer aus), muss ich mich sehr anstrengen. Aufgrund der Anwesenheit von Kindern haben drahtlose Mäuse und Tastaturen hier keine Wurzeln. Ich habe lange Zeit mit Interesse die Fähigkeit von Arduino Leonardo beobachtet, sich als Maus und Tastatur auszugeben, und als dieses Board zu mir kam, habe ich diese Funktion in der FLProg-Programmversion 2.2 implementiert. Zusammen mit den Funktionen des RevoteXY-Projekts stellte sich eine sehr interessante Sache heraus. So starten Sie das Video des resultierenden Geräts.



Zunächst wird auf der RemoteXY-Website ein Projekt erstellt. Die Besonderheit dieses Projekts ist, dass die von Ihnen erstellte Schnittstelle nicht auf das Telefon geladen werden muss. Es reicht aus, das RemoteXY-Programm auf dem Telefon zu haben, und alle erstellten Schnittstellen werden in der Arduino-Firmware gespeichert. Bei Anschluss wird die Beschreibung der Schnittstelle an das Telefon übertragen und im Programm geöffnet.

Jetzt gibt es auf der RemoteXY-Website die Möglichkeit, ihre Projekte zu teilen. Hier ist ein Link zu meinem Projekt für das in dieser Lektion beschriebene Gerät. Das Projekt besteht aus vier Bildschirmen.

Der erste Bildschirm ist die Maussteuerung.



Verwenden Sie den Joystick, um die Bewegung der Maus zu steuern. Die Steuerung damit ist der Steuerung mit Hilfe des Objekts, das in der Mitte der Tastatur des berühmten ThinkPad T41 hervorsteht, sehr ähnlich.



Ich habe das schon lange, also habe ich Erfahrung. Die Entwickler des RemoteXY-Projekts versprachen, ein neues Element zu entwickeln - das „Touch Panel“, mit dessen Hilfe das Touchpad des Laptops vollständig simuliert werden kann. Wenn dies in diesem Projekt passiert, werde ich den Joystick durch ihn ersetzen. Der Schieberegler auf der rechten Seite des Bildschirms simuliert ein Scrollrad. Je stärker die Verschiebung von der Mitte ist, desto schneller dreht sich das Rad der virtuellen Maus.

Drei Spalten mit Schaltflächen auf der linken Seite des Bildschirms simulieren unterschiedliche Klicks auf virtuelle Maustasten. Jede Spalte ist für ihre Schaltfläche verantwortlich - links, in der Mitte bzw. rechts. Die obere Tastenreihe (mit dem Symbol „P“) simuliert einen normalen Druck. Das heißt, wenn Sie auf diese Schaltfläche klicken, wird die entsprechende Schaltfläche der virtuellen Maus gedrückt. Wenn sie losgelassen wird, wird sie freigegeben. Die zweite Zeile (mit dem Symbol „PF“) - simuliert einen Klick mit einem Latch. Wenn Sie diese Taste zum ersten Mal drücken, wird die virtuelle Maustaste gedrückt und die zweite Taste losgelassen. Dies ist beispielsweise beim Ziehen von Fenstern hilfreich. Zeigte mit der Maus auf den Fenstertitel, klickte auf die Schaltfläche „PF“ (fixierte das Fenster an der Maus), zog das Fenster und klickte erneut auf „PF“ (ließ das Fenster los). Nun, die dritte Zeile (mit dem Symbol "C") ist ein Klick auf die entsprechende Schaltfläche der virtuellen Maus.

Der zweite Bildschirm ist die englische Tastatur.



Es gibt vor allem nichts zu erklären. Die Schaltfläche "Großbuchstaben" aktiviert Großbuchstaben, die Schaltfläche "Shft" enthält Großbuchstaben pro Zeichen. Nach Eingabe eines Zeichens wird es zurückgesetzt.

Der dritte Bildschirm ist die russische Tastatur



. Hier ist alles klar. Die Tasten „Caps“ und „Shift“ funktionieren genauso wie auf dem vorherigen Bildschirm.

Nun, der letzte Bildschirm - Zahlen und Sonderzeichen.



Es gibt eine leichte Subtilität. Es gab einen kleinen Fehler im Online-Editor von RemoteXY. Wenn das Symbol "\" in der Schaltflächenbeschriftung verwendet wird, wird das Projekt nicht gespeichert und nicht verarbeitet. Daher habe ich für die Schaltfläche dieses Symbols die Aufschrift „nicht /“ verwendet. Ich habe mir nichts Besseres ausgedacht.

Nach dem Erstellen des Projekts auf der RemoteXY-Website müssen Sie den Code zum Herunterladen in den Block „RemoteXY“ im FLProg-Projekt abrufen. Wählen Sie dazu in den Eigenschaften des RemoteXY-Projekts die Programmierumgebung FLProg aus.



Der Code, der auf der RemoteXY-Site für diese Lektion abgerufen wurde
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 */

Wir sind mit der RemoteXY-Website fertig. Wir gehen auf FLProg zum Projekt über.

Die Arduino Leonardo-Controller (aktiviert), Arduino DUE (Unterstützung für diesen Controller ab Version 2.3 - aktiviert) und Arduino Micro (theoretisch nicht eingetroffen, ich warte auf eine Überprüfung) können vorgeben, ein Standard zu sein (dh keine speziellen Treiber erforderlich), Maus und Tastatur. .

Das FLProg-Projekt für diese Lektion kann hier heruntergeladen werden . Das Bluetooth-Modul HC-05 wird als Kommunikationsgerät mit dem Telefon verwendet. Es ist gemäß der Tabelle angeschlossen.
HC-051 ModulArduino Leonardo
Vcc+ 5V
GNDGND
TXDD0 (RX1)
RXDD1 (TX1)

Betrachten Sie das Projekt:



Es gibt eine sehr große „RemoteXY“ -Einheit, die die Kommunikation mit dem Telefon ermöglicht. Um es zu konfigurieren, müssen Sie den von der RemoteXY-Projektsite empfangenen Code darauf herunterladen. Der Ladevorgang wird in den Informationen zum Block (Blockeigenschaften -> Registerkarte „Informationen“) ausführlich beschrieben, daher werden wir ihn hier nicht duplizieren. Ich stelle nur für diejenigen fest, die in Version FLProg 2.3 und früher arbeiten. In diesen Versionen gibt es einen kleinen Fehler. Wenn Sie beim Erstellen eines Projekts auf der RemoteXY-Website in den Einstellungen einen Port auswählen, der nicht vorhanden ist oder in dem Projekt belegt ist, in das die Beschreibung geladen wird, stürzt das Programm beim Laden ab. Um dies zu vermeiden, müssen Sie ZUERST einen freien Port in den Blockeinstellungen auswählen und dann die Beschreibung laden. In späteren Versionen von FLProg wurde dieser Fehler behoben.

Mit den Blöcken CD (Encoder) wird die Nummer der gedrückten Taste bestimmt. Sie geben bei ihrer Ausgabe die Eingabenummer an, auf der die logische 1 angezeigt wurde. In Abwesenheit eines Protokolls. 1 an allen Eingängen, am Ausgang dieses Blocks 0.



Hier erkennen wir anhand der vom Telefon empfangenen Daten die Bewegungsrichtung von Maus und Rad. Ich habe 5 Totbandeinheiten ausgewählt (mit einer maximalen Änderung des Signals vom Joystick und Schieberegler 0-100 in jede Richtung). Um die Arbeit mit der Maus zu verbessern, kann dieser Wert im Prinzip herumgespielt werden. Hier wird auch die Schrittgröße festgelegt (Geschwindigkeit der Mausbewegung oder des Bildlaufs). Für eine komfortablere Maussteuerung können auch Blockparameter „Skalieren“ gespielt werden.



Hier senden wir direkt Befehle zum Bewegen der virtuellen Maus. Verwenden Sie dazu den neuen Block „Maus bewegen“. Jeder der Blöcke sendet einen Befehl, um die Maus alle 10 ms in eine bestimmte Richtung zu bewegen (in den Blockeinstellungen festgelegt). Dies erfolgt in einem Schritt, der auf der vorherigen Karte berechnet wurde, wenn am Eingang „Senden“ ein hoher Pegel vorhanden ist.



Auch hier wird der neue Mausradblock eingesetzt. Dieser Block sendet einen Befehl zum Drehen des Scrollrads der virtuellen Maus. Um einen gleichmäßigen Effekt zu erzielen, wird hier ein anderes Prinzip (anders als beim Bewegen der Maus) verwendet. Wenn am Eingang „Senden“ ein hoher Pegel vorhanden ist, sendet das Gerät an die virtuelle Maus einen Befehl zum Drehen des Scrollrads um einen Schritt, jedoch mit einer an Bord 2 berechneten Frequenz. Diese Frequenz hängt von der Position des Schiebereglers am Telefon ab und ändert sich von 200 Millisekunden auf 5 Millisekunden, wenn sich der Wert ändert vom Schieberegler von 5 (Totzone) bis 100 (Extremposition) empfangen.



Hier wird der Block „MousePressKey“ verwendet. Auf einer hohen Ebene am Eingang „Senden“ hält es die in den Einstellungen ausgewählte virtuelle Maustaste gedrückt und auf einer niedrigen Ebene gibt es sie frei. Um den Effekt des Drückens mit Fixierung zu realisieren, werden TT-Trigger (Zähltrigger) verwendet. An der ersten Vorderkante am Eingang übersetzen sie ihre Ausgabe in einen Protokollzustand. 1 und in der Sekunde lassen sie es auf 0 fallen. Und so in einem Kreis.



Hier verwenden wir den Block „MouseClickKey“, der an der steigenden Flanke des Eingangs „Senden“ einen kurzen Klick auf die in den Blockeinstellungen ausgewählte virtuelle Maustaste ausführt.



Hier werden die Blöcke „KeyboardStatus“ und „MouseStatus“ verwendet, die bei hoher Statuseingabe die virtuelle Tastatur bzw. Maus einschalten und auf niedriger Ebene ausschalten. In diesem Schema ist das Ein- und Ausschalten des Signals das Vorhandensein einer Telefonverbindung mit einem Arduino. Sie wird am Ausgang „CS“ des Blocks „RemoteXY“ (Karte 1) gebildet. Wenn eine Verbindung besteht, leuchten wir außerdem die in die Arduino-Platine eingebaute LED (Pin 13).



Hier wird bestimmt, ob eine Taste auf einer der Tastaturen in der Anwendung des Telefons gedrückt wird und auf welcher Tastatur die Taste gedrückt wurde - Russisch oder Englisch. Zusätzlich werden Signale für die Zündung der LED in der oberen rechten Ecke jeder Anwendungstastatur des Telefons generiert. Diese LED zeigt an, dass das Tastendrucksignal die Steuerung erreicht hat. Ich habe es während des Setups verwendet, aber beschlossen, es in der endgültigen Version der Anwendung zu belassen.



Dies bestimmt, ob ein Großbuchstabe eingegeben werden soll. Die Vorderkante beim Drücken der Umschalttaste in der Anwendung auf dem Telefon setzt den SR-Trigger auf den Status log.1. Nach dem Ende der Zeicheneingabe (Hinterflanke des Signals für das Vorhandensein des gedrückten Zeichens) wird der Trigger auf 0 zurückgesetzt.
Jedes Drücken der Taste "Caps" in der Anwendung auf dem Telefon kehrt die Betätigung der Taste "Shift" um. Das heißt, in der Ausgangsposition besteht der Haupteingabestatus aus Kleinbuchstaben. Wenn Sie die Umschalttaste drücken, wird ein Großbuchstabe eingegeben. Nach einmaligem Drücken der Großbuchstaben ändert sich der Modus. Großbuchstaben werden zu den Hauptbuchstaben, und wenn Sie die Umschalttaste drücken, wird ein Kleinbuchstabe eingegeben. Wenn die Taste „Caps“ erneut gedrückt wird, wechselt der Eingang in den Hauptmodus. Zusätzlich wird ein Signal zum Aufleuchten der Umschaltanzeige in der Anwendung auf dem Telefon erzeugt.



Hier wird aus der auf der Tastatur in der Anwendung auf dem Telefon der Taste gedrückten Nummer der Symbolcode dieser Taste gebildet. Dies erfolgt über den Block „Codetabelle“. Dieser Block generiert am Ausgang „Q“ einen Code, dessen Anzahl in der in den Block geladenen Tabelle dem Wert am Eingang „I“ entspricht.

Die Codetabelle wird in den Block „Codetabelle“ auf dieser Karte geladen.
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.


Bitte beachten Sie, dass sowohl russische als auch englische Zeichen dieselbe Codetabelle verwenden. Tatsache ist, dass die Keybord-Bibliothek nur Einzelbyte-Codes versteht und tatsächlich eine Taste auf der virtuellen Tastatur drückt, auf die ein Symbol mit dem an sie übergebenen Code geschrieben ist. Um russische Zeichen einzugeben, wechselt die Eingabemethode auf dem Computer bei der Eingabe zwangsweise auf Russisch. Wir werden auf der nächsten Tafel überlegen, wie dies gemacht wird.



Hier werden zwei "SequenceKeybord" -Blöcke verwendet. Diese Blöcke an der steigenden Flanke am Eingang „Senden“ führen ein Tastaturaktionsskript aus, das bei der Konfiguration des Blocks konfiguriert wurde. Mit diesem Block können wir die Eingabe von russischen oder englischen Zeichen sowie das Umschalten von Klein- oder Großbuchstaben konfigurieren. Dies erfordert jedoch auch eine Konfiguration des Computers, an den unser Gerät angeschlossen ist. Sie müssen eine Tastenkombination konfigurieren, um russische und angdische Layouts zu aktivieren. Dies erfolgt in der Computersteuerung.







Für dieses Gerät habe ich die Aufnahme von Englisch mit den Tasten STRG + 1 und Russisch STRG + 0 konfiguriert. Es sind diese Kombinationen, die in Skriptblöcken verwendet werden.
Stellen Sie sich ein Top-Block-Szenario vor.



Das Skript wird in Schritten von oben nach unten an der ansteigenden Flanke am Eingang „Senden“ ausgeführt (wenn das Signal für das Vorhandensein eines gedrückten Zeichens auf der Anwendungstastatur im Telefon angezeigt wird). Im ersten Schritt wird die STRG-Taste auf der virtuellen Tastatur gedrückt und gehalten. Im zweiten Schritt wird kurz auf die Taste gedrückt, der Code wird dem Eingang „Code Step 2“ zugeführt. Wenn die Taste auf der russischen Tastatur gedrückt wurde, ist dies 48 (Zeichencode 1) und in Englisch - 49 (Zeichencode 0). Im dritten Schritt wird die STRG-Taste losgelassen. Daher haben wir die Eingabesprache auf die Sprache umgestellt, die wir zur Eingabe dieses Zeichens benötigen.

Der nächste Schritt hängt von der hohen Stufe des Eingangs „Aktivitätsschritt 4“ ab. Es tritt auf, wenn der Großschreibungsmodus aktiv ist. In diesem Fall wird Schritt 4 ausgeführt und die Umschalttaste auf der virtuellen Tastatur gedrückt gehalten. Auf diese Weise werden Großbuchstaben eingegeben.

Nun, im letzten Schritt wird die virtuelle Tastaturtaste gedrückt und gehalten, der Code, der zur Eingabe von „Code Step 5“ kommt (der Code der Taste, die wir in der Anwendung auf dem Telefon auf der Tastatur gedrückt haben).

Wenn das Signal, dass eine Taste auf der Tastatur in der Anwendung auf dem Telefon gedrückt wird, aufgrund einer Inversion am Eingang des unteren Blocks des Skripts verschwindet, wird das darin konfigurierte Skript ausgeführt.



Zuerst lassen wir die zuvor gedrückte Symboltaste los und dann die Umschalttaste



Hier erzeugen wir ähnlich wie auf Karte 10 ein Signal über das Vorhandensein einer gedrückten Taste auf der Tastatur für Sonderzeichen und Zahlen in der Anwendung auf dem Telefon und den Code für diese Taste.

Die Codetabelle wird in den Block „Codetabelle“ auf dieser Karte geladen.
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~




Wenn in der Anwendung auf dem Telefon ein Signal angezeigt wird, dass eine spezielle Taste auf der Tastatur gedrückt wird, wird das im Block „SequenceKeyboard“ konfigurierte Skript ausgeführt. Darin übersetzen wir zuerst die Eingabemethode ins Englische (Drücken der Taste „STRG“ → Drücken der Taste „1“ → Loslassen der Taste „STRG“) und drücken dann die gewünschte Zeichentaste. Wenn das Vorhandensein der gedrückten Taste verschwindet, wird eine Einheit der einmaligen Belichtung der Tastatur „OneKeyboard“ ausgeführt, die eine in den Einstellungen programmierte Aktion ausführt. In diesem Fall wird die zuvor gedrückte Sonderzeichentaste losgelassen.

Nach der Kompilierung nimmt dieses Projekt etwas mehr als die Hälfte des Speichers des Arduino Leonardo-Controllers ein, wodurch verschiedene Modifikationen dieses Projekts möglich sind.
Viel Glück mit Ihrer Kreativität.

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


All Articles