Hallo,
Ich habe ein Arduino Mini (Pro Micro) und möchte ihn eine Tastatur Simulieren lassen. Nun ist mein Problem dass er denkt dass der Computer an den er angeschlossen ist ein QWERTY Layout hat und er somit das y & z sowie so gut wie alle Sonderzeichen mit anderen Zeichen vertauscht. Gibt es eine Möglichkeit das Layout von 'Keyboard.h' zu wechseln?
Ich hoffe mir kann jemand helfen ggf. schon schreiben wie ich dies ändern kann.
Der Arduino sendet Scancodes über die USB-Schnittstelle an den Computer und der Computer übersetzt diese dann in ein entsprechendes Zeichen. Damit die Eingabe im Sketch etwas einfacher ist, kann man Strings übergeben, die mit der Tabelle in entsprechende Scancodes für eine US-amerikanische Tastaturbelegung übersetzt werden.
Du hast nun zwei Möglichkeiten:
Du stellst am Computer die Tastatur auf US-amerikanisch um.
Du änderst die Tabelle in Keyboard.h so, dass die Keycodes für eine deutsche, schweizer oder österreichische Tastaturbelegung gesendet werden. Hier hast Du einfach das Problem, dass auf der US-amerikanischen Tastatur nur ASCII-Zeichen vorkommen, während auf den europäischen Varianten noch andere Zeichen vorkommen. Somit hast Du ein Encoding-Problem, d.h. Du musst Dich darum kümmern, wie die Zeichen im String codiert sind. Zur Verfügung stehen UTF-8 und ISO-8859-1, wobei für den deutschsprachigen Raum letzteres einfacher zu handhaben ist.
pylon:
Der Arduino sendet Scancodes über die USB-Schnittstelle an den Computer und der Computer übersetzt diese dann in ein entsprechendes Zeichen. Damit die Eingabe im Sketch etwas einfacher ist, kann man Strings übergeben, die mit der Tabelle in entsprechende Scancodes für eine US-amerikanische Tastaturbelegung übersetzt werden.
Du hast nun zwei Möglichkeiten:
Du stellst am Computer die Tastatur auf US-amerikanisch um.
Du änderst die Tabelle in Keyboard.h so, dass die Keycodes für eine deutsche, schweizer oder österreichische Tastaturbelegung gesendet werden. Hier hast Du einfach das Problem, dass auf der US-amerikanischen Tastatur nur ASCII-Zeichen vorkommen, während auf den europäischen Varianten noch andere Zeichen vorkommen. Somit hast Du ein Encoding-Problem, d.h. Du musst Dich darum kümmern, wie die Zeichen im String codiert sind. Zur Verfügung stehen UTF-8 und ISO-8859-1, wobei für den deutschsprachigen Raum letzteres einfacher zu handhaben ist.
Zur Möglichkeit Nr.1
Kann man das Tastatur Layout in Windows 7-10 über die CommandPromt von Windows einfach zu US ändern?
Zur Möglichkeit Nr.2
Wie muss ich dann welche Tabelle umändern? In der Tabelle der Keyboard.h Datei steht ja nur was von #define KEY_LEFT_CTRL 0x80 oder #define KEY_UP_ARROW 0xDA
Aber nichts von den normalen Buchstaben wie A, B, C & Co.
Zur Möglichkeit Nr.1
Kann man das Tastatur Layout in Windows 7-10 über die CommandPromt von Windows einfach zu US ändern?
Keine Ahnung, Windows habe ich nicht.
Zur Möglichkeit Nr.2
Wie muss ich dann welche Tabelle umändern? In der Tabelle der Keyboard.h Datei steht ja nur was von #define KEY_LEFT_CTRL 0x80 oder #define KEY_UP_ARROW 0xDA
Aber nichts von den normalen Buchstaben wie A, B, C & Co.
Oh, entschuldige, die Tabelle ist in Keyboard.cpp und heisst _asciimap. Damit kannst Du aber nur die ASCII-Zeichen übertragen. Wenn Du Umlaute und dergleichen machen willst, musst Du die Klasse komplett umschreiben, denn die oberen 128 Werte eines Bytes sind für die Modifiers (Umschaltung, Control, Windows-Taste, etc.) reserviert in der jetzigen Version.
Alternativ kannst Du press() und release() so umschreiben, dass sie anstatt ASCII-Zeichen einfach die Scancodes entgegennehmen.
Oh, entschuldige, die Tabelle ist in Keyboard.cpp und heisst _asciimap. Damit kannst Du aber nur die ASCII-Zeichen übertragen. Wenn Du Umlaute und dergleichen machen willst, musst Du die Klasse komplett umschreiben, denn die oberen 128 Werte eines Bytes sind für die Modifiers (Umschaltung, Control, Windows-Taste, etc.) reserviert in der jetzigen Version.
Alternativ kannst Du press() und release() so umschreiben, dass sie anstatt ASCII-Zeichen einfach die Scancodes entgegennehmen.
Hast du evtl. einen Link zu einer Tabelle? Bei jeder Tabelle die ich finde sind die Hex Codes irgendwie verschieden und wenn ich den Hex Code von 'a' z.B. mal in Keyboard.cpp kopiere und den Arduino mal 'a' schreiben lasse, schreibt er entweder nichts oder einmal hat er eine '9' geschrieben... Obwohl ja das 'a' eigentlich nicht mal verschieden sein müsste vom US zum DE Layout... Ich blick da nicht durch sry .
Keyboard funktioniert (ohne gravierende "Umbauten") nur mit Arduino Leonardo und Micro (und Derivate). Mit dem Due geht es glaube ich auch, mit dem kenne ich mich überhaupt nicht aus.