Forum: PC-Programmierung Windows 10 Serielle Schnittstelle auslesen und weiter verwenden


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Philjamin (steve_hobbs)


Lesenswert?

Hallo ihr Alle,

Ich möchte mir gerne für meinen Windows 10 PC ein Fußpedal bauen, 
welches mir Tastatureingaben simulieren soll.
Hintergrund ist, dass ich für eine Software Tastaturkürzel benutze, 
diese aber gerne auch per Fuß, als nur per Hand eingeben möchte.

Meine Idee war, dass ich einfach mit einem Arudino per Knopfdruck 
(Pedal) einen Tastaturanschlag simuliere (Library "Keyboard").
Da ich aber öfters ändern will, welches Zeichen ich mit dem Pedal 
„drücke“, dachte ich, dass ich auch per Arduino die Pedalnummer (da ich 
mehrere Pedale benutze) an den SerialPort des PCs senden kann und dann 
per PC-Software den jeweiligen Tastaturanschlag simuliere, den ich 
einfacher ändern kann.

Meine Frage ist daher, ob das so geht bzw. mit welcher Software ich das 
machen könnte (Java…?)?

Ich hoffe ihr versteht was ich machen will! (Sonst bitte ich um 
Rückfragen)

Gruß, Philipp

von Gustl B. (gustl_b)


Lesenswert?

Klar geht das mit Java. Geht aber auch mit so ziemlich jeder anderen 
Sprache.

von Jens M. (schuchkleisser)


Lesenswert?

Ich hätte gesagt man nimmt einen Arduino der nativ USB/Keyboard spricht 
und lässt den pro Pedal Control/Alt/Shift-Fx sprechen (oder A,B,C...), 
eben Keys die kein Programm nutzt, und dann haut man da ein 
Autohotkey-Skript drauf.
Das funktioniert dann auf mehr Hardware weil man USB sicher öfter findet 
als RS232, und über AutoHotKey ist die Software fertig, flexibel und 
leicht änderbar.

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Gustl B. schrieb:
> Klar geht das mit Java. Geht aber auch mit so ziemlich jeder anderen
> Sprache.

Grundsätzlich erstmal ja. Würde letztlich alles SendInput aus winuser.h 
verwenden, also eine Funktion aus dem Win32-API.

Aber: Die Möglichkeiten dieser Funktion wurden aus Sicherheitsgründen 
beschränkt. Früher(tm) konnte man mittels der Vorgänger-Funktionen 
keyb_event bzw. mouse_event wirklich an jedes Fenster Input senden. 
Genaueres über die Einschränkungen von SendInput lässt sich über die 
online-Doku der Funktion ermitteln.

Für unbeschränkte Möglichkeiten muß man heute also eine "wirkliche" 
Tastatur verwenden.

Dazu kommt (allerdings unabhängig davon, ob "echter" Input oder 
simulierter) das Problem der Fokus-Steuerung. Es ist garnicht so 
einfach, zuverlässig dafür zu sorgen, dass die Tastenanschläge genau das 
Fenster erreichen, in dem man sie haben will.

von Rainer W. (rawi)


Lesenswert?

Ob S. schrieb:
> Für unbeschränkte Möglichkeiten muß man heute also eine "wirkliche"
> Tastatur verwenden.

Deshalb eben den Arduino mit USB, der eine "wirkliche" Tastatur 
emuliert, z.B. einen Arduino Micro.

von Christian M. (christian_m280)


Lesenswert?

Rainer W. schrieb:
> Ob S. schrieb:
>> Für unbeschränkte Möglichkeiten muß man heute also eine "wirkliche"
>> Tastatur verwenden.
>
> Deshalb eben den Arduino mit USB, der eine "wirkliche" Tastatur
> emuliert, z.B. einen Arduino Micro.

Aber eben:

Philjamin schrieb:
> Da ich aber öfters ändern will, welches Zeichen ich mit dem Pedal
> „drücke“

Deshalb die Idee

Jens M. schrieb:
> und dann haut man da ein Autohotkey-Skript drauf.

Gruss Chregu

von Stefan F. (Gast)


Lesenswert?

Gustl B. schrieb:
> Klar geht das mit Java.

Ja schon, aber Java unterstützt keine seriellen Ports. Dazu muss man 
eine C Bibliothek einbinden, die nach meinem Kenntnisstand schon "ewig" 
nicht mehr gepflegt wird. Was nicht heissen soll, dass sie nicht 
funktioniert.

Für solche Basteleien gibt es einen speziellen Chip: 
https://www.codemercs.com/de/tastatur

von Heinz B. (Firma: Privat) (hbrill)


Lesenswert?

Vielleicht könnte man sich auch die Funktionsweise /API einer
Maus zunutze machen. Wären dann aber nur 2 Pedale oder
höchstens 3, wenn man das Mausrad bzw. mittlere Taste noch dazu
rechnet. Da bräuchte man ja nur eine Mechanik für die Pedale,
die dann die Maustasten bedient. Per SendKey o. ä. an das entsprechende
Fenster geht es dann weiter.

Wäre dann auch softwaremäßig einfacher.

War jetzt nur mal so eine Idee von mir.

von Stefan F. (Gast)


Lesenswert?

Link zur Java Library:
https://github.com/rxtx/rxtx
http://fizzed.com/oss/rxtx-for-java
http://rxtx.qbang.org/wiki/index.php/Main_Page

(Wie gesagt, nicht mehr empfehlenswert)

Wenn du es wirklich seriell machen willst, kannst du von meinem "I/O 
Modul" Projekt abgucken: http://stefanfrings.de/serial_io/index.html Ich 
habe auf der Seite auch Varianten mit Bluetooth, USB, Ethernet und WLAN. 
Alle mit dem Kommunikations-Protokoll.

von Heinz B. (Firma: Privat) (hbrill)


Lesenswert?

Oder vielleicht noch besser wäre ein ausgedienter Joystick.
Soviel ich weiß, gehen da bis zu 32 Knöpfe. Soviele hat zwar
ein Joystick nicht, aber vielleicht könnte man da auch mit
zus. Tastern nachhelfen.

von Stefan F. (Gast)


Lesenswert?

Stefan F. schrieb:
> Alle mit dem Kommunikations-Protokoll.

Korrektur: Alle mit dem selben Kommunikations-Protokoll.

von Heinz B. (Firma: Privat) (hbrill)


Lesenswert?


von Rüdiger B. (rbruns)


Angehängte Dateien:

Lesenswert?


von Frank K. (fchk)


Lesenswert?

Philjamin schrieb:
> Hallo ihr Alle,
>
> Ich möchte mir gerne für meinen Windows 10 PC ein Fußpedal bauen,
> welches mir Tastatureingaben simulieren soll.
> Hintergrund ist, dass ich für eine Software Tastaturkürzel benutze,
> diese aber gerne auch per Fuß, als nur per Hand eingeben möchte.

Nimm das hier:

https://www.codemercs.com/de/starterkits/kw28eval

Da musst Du nichts mehr programmieren, das ist alles schon fertig. Du 
musst das Board nur noch verdrahten, d.h. Deine Taster und das USB-Kabel 
bzw eine USB-B Buchse anschließen. Die Software zum Konfigurieren der 
Tasten gibts da auch zum Download.

fchk

von Holger D. (hodoe)


Lesenswert?

Stefan F. schrieb:
> Ja schon, aber Java unterstützt keine seriellen Ports. Dazu muss man
> eine C Bibliothek einbinden, die nach meinem Kenntnisstand schon "ewig"
> nicht mehr gepflegt wird. Was nicht heissen soll, dass sie nicht
> funktioniert.

Moin, ich verwende schon mehrere Jahre jssc 
(https://github.com/java-native/jssc/releases/tag/v2.9.5). Die aktuelle 
Version ist vom August. Das funktioniert unter OpenJDK als auch mit der 
kommerziellen Java-Version. Der AG stellt nur Windows-10 Pro LTSC zur 
Verfügung. Neun serielle Schnittstellen via USB-Adapter einzulesen ist 
überhaupt kein Thema.


Gruß
Holger

von Flunder (flunder)


Lesenswert?

Hallo,
also Java ist in der Tat suboptimal, da es durch die Vorgabe auf jeder 
Plattform zu laufen erstmal keine Funktionalität für hardwarenahe 
Programmierung bietet.

Wie wäre es andersrum ? So ein Arduino Leonardo emuliert eigentlich 
immer auch einen RS232 Port, damit Du an seinen Bootloader kommst. Da 
kann man auch Befehle entgegen nehmen, welche Taste bei einer bestimmten 
Fußbewegung gesendet werden soll. Die Einstellungen solltest Du halt im 
Arduino so ablegen, dass sie auch ohne Strom erhalten bleiben.

Bleiben jetzt noch 2 Möglichkeiten :
a) Dein Arduino bietet zur Konfiguration eine Kommandozeile, auf die Du 
z.B. per Putty zugreifst.
b) Du erstellst eine eigene Software für PC zur Konfiguration, die ihre 
Einstellungen in Deinem Format und Protokoll über die serielle 
Schnittstelle dem Arduino mitteilt. Wobei ich mit Java nie wirklich warm 
geworden bin und die PC-Software mit MS-Visual-Studio in C# zusammen 
kloppen würde.

Schick wäre es auf jeden Fall, mehrere Profile auf einem Arduino zu 
haben, die man schnell mal umschalten kann. Eventuell per Taster und 
Leds oder Kodierschalter auswählbar, je nach freien Portpins.

von Jens M. (schuchkleisser)


Lesenswert?

Flunder schrieb:
> Du erstellst eine eigene Software für PC zur Konfiguration, die ihre
> Einstellungen in Deinem Format und Protokoll über die serielle
> Schnittstelle dem Arduino mitteilt.

Wat?
Dann müsste man ja sogar zweimal PC-Software machen, plus noch die für 
den Arduino.
Lies nochmal den OP, dann fällt dir auf das du eigentlich genau das 
vorschlägst was er fragt, nur komplizierter.
Deine Lösung wäre geeignet, wenn man dann einen RS232-Keyboard-Wedge 
nutzen könnte/müsste, wie ihn viele Barcodescanner nutzen.

von Flunder (flunder)


Lesenswert?

Jens M. schrieb:
> Dann müsste man ja sogar zweimal PC-Software machen, plus noch die für
> den Arduino.

Jetzt hast Du mich falsch verstanden. Bei b) gibt es eine Software auf 
dem PC zum Parametrieren. Dann gibt es natürlich noch die Software auf 
dem Arduino.
Im Betrieb spielt der Arduino Tastatur, dazu braucht es keine weitere 
Software.

Ok, die Tastendrücke gehen an das Fenster, das momentan den Fokus hat, 
aber beim Spielen ist das ja eigentlich immer das Spiel im 
Vollbildmodus.

von Harald K. (kirnbichler)


Lesenswert?

Das hier könnte auch helfen.

https://www.232key.com/index.html

von Jens M. (schuchkleisser)


Lesenswert?

Flunder schrieb:
> Im Betrieb spielt der Arduino Tastatur, dazu braucht es keine weitere
> Software.

Oh, achso, eine programmierbare Makrotastatur, das macht natürlich schon 
Sinn, sorry.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.