Serielle Daten in Tastaturanschläge verwandeln

OP #4305837
Lesenswert?

Hallo,

Ich will mit meinem Arduino Tastaturanschläge machen
Ich habe mit meinem Arduino ein Programm geschrieben, welches "15" in 
Hex, also ein F sendet wenn man einen Knopf drückt.
Im serial monitor kommt dieses F an, nur was muss ich jetzt machen, dass 
zum Beispiel im Word dieses F geschrieben wird?
Ich habe den Arduino Mega 2560
Gibt es eine Software für den PC, das die seriellen Daten vom USB in 
Tastaturanschläge verwandelt?
#4305844
Lesenswert?

Peter P. schrieb:
> - und warum nicht den µController als USB HumanInterfaceDevice anbinden
>    also als Keyboard und einfach los tippern lassen.

Weil es ein Arduino ist und es daher diese Möglichkeit gar nicht gibt?

Man könnte aus zwei I/O Pins eine PS/2 Schnittstelle machen.

Aber Scancodes zu senden ist nicht wirklich lustig, die Ings bei IBM 
müssen damals ganz schlechtes Gras geraucht haben als die sich das 
ausgedacht haben.

Edit: das ist an der Frage vorbei okay, es wird eine Windows-Software 
gesucht.
Aber das hier ist das Mikrocontroller-Forum...
OP #4305862
Lesenswert?

Das MouseKeyboard von der offiziellen Arduino Website hab ich natürlich 
schon probiert aber das funktioniert nur mit dem Arduino Leonardo, weil 
der so ne Keyboard emulation hat.
Was kann denn da so schwierig sein, ich bekomme ein "F" beim USB herein, 
das muss ja nur mit ner Software konvertiert werden...
Gast #4305891
Lesenswert?

Melvyn S. schrieb:
> Das MouseKeyboard von der offiziellen Arduino Website hab ich natürlich
> schon probiert aber das funktioniert nur mit dem Arduino Leonardo, weil
> der so ne Keyboard emulation hat.
> Was kann denn da so schwierig sein, ich bekomme ein "F" beim USB herein,
> das muss ja nur mit ner Software konvertiert werden...

Nun, das schwierige ist, dass so ein PC mit einem Betriebssystem eine 
"Organisationsform" ist. D.h. in Bezug auf Dein Problem, dass es 
gewisse, fest umschriebene (d.h. definierte) Wege gibt, Daten über die 
Schnittstelle in den PC zu bringen und dort zu verarbeiten. Das Problem 
ist möglicherweise, dass Du von dieser Struktur sehr wenig weisst.

Deswegen nimmst Du, wiederum möglicherweise, an, dass es sich nur darum 
handelt ein 'F' von irgend woher nach irgend wohin zu transportieren. 
Zwar ist das physisch durchaus korrekt. Aber dennoch geht das, um im 
Gesamtsystem korrekt zu sein, d.h. die Wirkung zu haben, die Du 
wünschst, nur auf ganz bestimmte Arten und Weisen.

Du hast zunächst einmal folgenden Bedarf an Wissen:

1. Kodierung, Schreibweise bzw. verbale Beschreibung von Literalen
"Der Buchstabe 'F'" wird z.B. in C als 'F' beschrieben, wobei das in 
Hochkommata eingeschlossene ein ASCII-Zeichen ist. Der ASCII-Zeichensatz 
stellt eine Zuordnung zwischen Zahlen und Zeichen her. Insofern als 
Zahlen gemeint sind, können diese als "Dezimalzahl 70" oder als 
"Hexadezimalzahl 46" verbal beschrieben werden. In C könnte man auch 
"70" oder "0x46" schreiben.

Was Du also willst ist, vermutlich, dass ASCII-Zeichen 'F', 0x46, 70 an 
Word weitergeben.


2. USB-Gerätetypen, serielle Schnittstelle, Tastatur, Treiber
An einen PC können verschiedene Peripheriegeräte angeschlossen werden. 
Das ist Dir soweit klar. Ein Betriebssystem spezifiziert gewisse Regeln, 
auf welche Weise diese Geräte gesteuert und wie von ihnen Daten 
empfangen werden. Konkret heisst das, wie und in welcher Reihenfolge 
welche I/O-Pins gesetzt werden oder eingelesen. Ausserdem natürlich zu 
welchem Zeitpunkt im Ablauf, die von einem I/O-Port gelesenen Daten 
beispielsweise als Zeichen von einer Tastatur oder als Byte von der 
Festplatte und damit als Teil einer Datei interpretiert werden und wohin 
das weiterzuleiten ist. Diese Beschreibung nennt man "Protokoll", die 
Software dazu "Treiber"; die Verbindung zwischen "Treiber" und 
Betriebssystem ist eine "Softwareschnittstelle", auch durch eine 
"Aufrufkonvention", eine Einsprungadresse und einige weitere Details 
beschrieben.
Das gilt für Festplatten, wie für Tastaturen und auch serielle 
Schnittstellen.

Du hast hier den Spezialfall, dass ein USB-Gerät eine serielle 
Schnittstelle nachbildet, die mittels Treiber dem Betriebssystem 
gegenüber als serielle Schnittstelle dargestellt wird.

3, Benutzerinteraktion im Betriebssystem
In der Regel ist vorgesehen, dass der Benutzer mittels Maus und Tastatur 
mit dem PC interagiert. Das Betriebssystem stellt diese Daten einer 
Anwendung zur Verfügung. Dafür gibt es einen Satz von Funktionen: die 
Windows-API. Die Funktion zum Einlesen von Zeichen von der Tastatur ist 
dazu definiert, benannt und über einige Zwischenschritte wird ein 
bestimmtes Stück Software ausgeführt, dass prüft ob ein Zeichen von der 
Tastatur vorliegt, oder, im Falle von Windows, die Anwendung wird 
angestossen, falls ein Zeichen vorliegt.
Wesentlich ist, das die Anwendung definiert, auf welche Weisen, über 
welche Wege (Tastatur etc.) sie Eingaben akzeptiert.

An sich ist Word nicht darauf eingerichtet, von der seriellen 
Schnittstelle Daten zu empfangen und diese als Eingabe zu 
interpretieren, die den Text ausmacht.

Diese Wege lassen sich, mit guter Kenntnis der Zusammenhänge auch 
modifizieren oder umgehen. Dazu gibt es entweder fertige Software oder 
man muss sie selber schreiben.
Es gab z.B., für eine alte Excel-Version einen Zusatz, der Daten von der 
seriellen Schnittstelle empfängt. Das ist ein Satz von Makros, der 
Zellinhalte ändert. Ich weiss nicht mehr genau. Mag sein, es war eine 
DLL die sich als Paket zu Excel dazu installieren liess.

Ich weiss nicht ob es das auch für Word gibt, aber es ist anzunehmen. Da 
ich nicht weiss, welches Betriebssystem oder welches Word Du verwendest, 
kann weder ich noch jemand anders einen konkreten Hinweis dazu geben. 
Suche doch einfach mal im Internet.

Ein anderer Weg (ein Umweg) wäre, die Daten von der Emulation der 
seriellen Schnittstelle in eine Text-Datei zu kopieren. Das Kommando 
dazu sieht etwa so aus: "copy con Datei.txt" Dazu solltest Du aber 
nochmal genau in der Hilfe zum Copy-Kommando nachlesen.

Ein dritter Weg wäre, die schon erwähnte Möglichkeit, ein USB-HID-Device 
auf dem uC laufen zu lassen. Auch dazu gibt es fertige Software. Evtl. 
brauchst Du einen anderen uC oder musst das Arduino-Paradigma verlassen.


Was ich schrieb sollte Dir aber zumindest erst einmal Anregungen geben, 
auf welchen Gebieten Du Dir, mit welchen Stichworten, Wissen aneignen 
solltest.
#4306024
Lesenswert?

Philipp K. schrieb:
> Merke: "Der" Arduino ist nur die Hardware, womit Du die programmierst
> ist egal.

Ah, vorsichtig mit solchen Aussagen.
Das ist sicher nicht falsch aber auch nicht korrekt, da Arduino nun 
einmal Hardware und Software ist, kann die Hardware alleine gemeint 
sein, muss aber nicht.

Also pauschal zu behaupten, dass jeder das gleiche meint wenn er Arduino 
erwähnt, ist eher nicht korrekt.

Ich bin davon ausgegangen, dass der TE Hardware+Software meint.
Und aufgrund der Timing-Anforderungen von USB und dem was die Arduino 
Software so an Performance frisst bin ich davon ausgegangen, dass VUSB 
keine Option ist.

Scheint aber doch zu funktionieren, auch gut.

Ich fürchte nur, viel mehr als USB wird der Arduino dann nicht mehr 
machen.
So blockierend umgesetzte Geschichten wie serielle Ausgabe, 
AD-Wandlungen oder LCD-Ausgabe dürften das sehr leicht unbrauchbar 
machen.
Der Mega 2560 wäre dann leicht verschwendet an die Aufgabe.
Gast #4306031
Lesenswert?

Ein Dreizeiler in Visual Studio, der die Schnittstelle einliest und in 
den keyboardbuffer schreibt.

Dann landen die Daten im yFocus adelnder Applikation wie WinWord.

Oder fertiges Programm:

ftp://support-datalogic.de/ADC/HHS/06.Verschiedenes/Windows_COM-Port_KBD 
_Umleitung-v1.3g.pdf
#4306438
Lesenswert?

Habe

Werner M. schrieb:
> Was ist an der Hardware eines Arduino-Boards Arduino? Meinst du die
> Pin-Anordnung und -Nummerierung oder die LEDs?
> Den Bootloader kann mal wohl kaum als Hardware bezeichnen.

Seit ihr heute alles Halb lesende Erbsenzähler?
Hab ich nicht geschrieben..Arduino ist eine OpenSource Marke, die 
besteht nunmal  Hauptsächlicherweise aus einer Sammlung Minimalistischer 
Developerboards mit Seriellem Bootloader die bis auf wenige Ausnahmen 
uneingeschränkte Funktion des belöteten AVRs bereitstellen. Wenn man 
noch keine Erfahrung hat kann man mit der Arduino IDE programmieren und 
die Sinngemäßen Pseudobezeichnungen beim Programmieren benutzen,auch 
jede andere Software verwenden, auch den Bootloader löschen oder sogar 
seine eigenen Projekte in die IDE einbetten.

Es ging mir nur darum das hier der Arduino ab und zu 
hauptsächlicherweise nicht als AVR dargestellt wird oder Nachteile aus 
der Luft geholt werden wie "Das Projekt geht nicht mit nem Arduino", 
wobei ein Projekt nur zu groß sein kann weil der Bootloader nen KB 
zuviel belegt.
#4306982
Lesenswert?

Rudolph R. schrieb:
> Man könnte aus zwei I/O Pins eine PS/2 Schnittstelle machen.
>
> Aber Scancodes zu senden ist nicht wirklich lustig, die Ings bei IBM
> müssen damals ganz schlechtes Gras geraucht haben als die sich das
> ausgedacht haben.

Nö, die haben einfach vom Tastatur-MC 8051 den UART-Mode 0 genommen.

Ich sehe auch kein Problem, mit 2 IOs des AVR das PS/2 Protokoll 
nachzubilden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren