Deutsche Ascii Tabelle für Keyboard.write?

Hallo,

ich habe mit meinem Arduino das Problem, dass wenn ich Keyboard.write(0x3F) ausführen lasse, dann kommt nicht wie erhofft ein Fragezeichen(?) sonder ein Unterstrich.
Nach der Tabelle müsste der Code für das Fragezeichen jedoch stimmen. ASCII-Tabelle
Ich habe rausgefunden, dass ich für das Fragezeichen 0x5F benötige das entspricht dem Unterstrich.

Sind die Zeichen somit einfach vertauscht oder ist das, wegen dem amerikanischen Tastaturlayout? Da das Fragezeichen bei der amerikanischen Tastatur dort ist wo bei uns der Unterstrich ist?
Gibt es eine ASCII Tabelle für das deutsche Tastaturlayout?

Vielen Dank
Kevin

Die Tastatur hat auch nicht einen Ashii Zeichensatz sondern einen Tastaturcode.
Der Tastaturtreiber wandelt den Scancode der Tastatur in den Ashiicode der entsprechenden Taste der eingestellten Tastatursprache. Wenn Du eine amerikanische Tastatur einstellst dann müßten die Zeichen stimmen.

https://www.arduino.cc/reference/en/language/functions/usb/keyboard/
https://www.arduino.cc/reference/en/language/functions/usb/keyboard/keyboardmodifiers/

Grüße Uwe

Bei einem Keyboard werden ja keine ASCII-Codes übertragen sondern (nur) Tastendrücke.
Etwa so: Die Tastatur meldet dem Computer "es wurde Taste sieben in der zweiten Reihe hinuntergrdrückt".
Das Betriebssystem (bzw. die Spracheinstellung) macht dann erst ein bestimmtes Zeichen daraus - eine französische Tastatur unterscheidet sich von einer deutschen nur durch deren Beschriftung, die Elektronik ist aber komplett gleich. Eine deutsche Spracheinstellung würde die obigen Informationen so deuten, dass die Taste "z" gedrückt wurde.

Beim Arduino Leonardo/Micro wird von einer amerikanischen Tastatur ausgegangen.
Wenn du also Keyboard.print("zzz") schreibst, dann meldet der Leonardo dem Computer "es wurde Taste zwei in Reihe 4 gedrückt", weil auf dieser Taste auf der amerikanschen Tastatur das "z" sitzt.
Bei deutscher Spracheinstellung wird dann daraus "yyy".
Leider gibt es beim Leonardo/Micro keine Möglichkeit auf deutsches Tastatur-Layout umzustellen (beim Teensy ist das anders).
Es ist auch nicht so einfach den Code in der "Library" umzuschreiben, weil er nur mit 7 Bit arbeitet (das achte Bit wird für die Keyboard-Modifiers verwendet).

Es gibt aber Workarounds.
Wenn du schreibst

Keyboard.print("Grüß dich!");

führt das (bei deutscher Spracheinstellung) zu folgendem Ergebnis: Grät dich!
Die Probleme sind natürlich das ü und das ß. Aber wenn du schreibst:

Keyboard.print(„Gr[- dich!“);

dann führt zum gewünschten Ergebnis: Grüß dich!
Die Workarounds für die anderen Zeichen kannst du dir ja vielleicht selbst herleiten :slight_smile:
Ob so ein Workaround für dich tragbar ist oder nicht, hängt ganz von deinem Projekt ab.

Es ist auch nicht so einfach den Code in der “Library” umzuschreiben, weil er nur mit 7 Bit arbeitet (das achte Bit wird für die Keyboard-Modifiers verwendet)

Wenn du auf die dritte Belegung einer deutschen Tastatur verzichtest ( @ | ~ \ ) ,
und die zusätzliche Taste <>|

könntest du ein bisschen was machen, aber “einfach” ist was anderes, da gebe ich uxomm recht.

Für die digispark Tastatur hab ich mal sowas gemacht… Das sollte das gleiche Problem sein, fürchte ich.

Super vielen Dank an alle hat mir sehr weiter geholfen. :slight_smile:
Mein Projekt ist ein MakroKeypad für meine Kollegen, dabei habe ich es so geregelt, dass das was Button 1 ausgibt auf einer SD Karte in der Textdatei 1 liegt u.s.w. , somit können meine Kollegen einfach die MakroKeys ändern.
Ich werden dann der Einfachheitshalber mit Workarounds arbeiten.
Oder wenn ich noch etwas Zeit habe werde ich die Keyboard.cpp ins Deutsche Layout ändern.