Ich verwende immer wieder mal einen Leonardo oder Micro, wenn es darum geht einen PC über Tastaturkommandos zu steuern. Weil das grundlegende Tastatur-Layout über die Arduino-IDE und Keyboard.h wohl der amerikanischen Tastatur verpflichtet ist, stößt man da recht bald auf "interessante Phänomene", wenn der PC, den man steuern möchte, zum Beispiel ein deutsches Tastaturlayout verwendet und ein "Sonderzeichen" erzeugt werden soll. ![]()
Aber mit der Zeit habe ich verschiedene Lösungsstrategien gefunden, wenn es um Sonderzeichen geht.
Vorbild PC-Tastatur (Windows):
Wenn ich auf meiner Tastatur (mit deutschen Layout) das Zeichen Ÿ erzeugen möchte, dann stelle ich zuerst mal fest, dass es keine eigene Taste mit diesem Zeichen gibt. Auch Kombinationsversuche mit verschiedenen Umschalttasten (z.B. AltGr) führen zu keinem Erfolg.
Aber so geht es:
Taste ALT drücken und halten und dann am Numpad eintippen:
0159
Taste ALT loslassen.
Und schon erscheint das gewünschte Zeichen: Ÿ
Das folgende Programm lässt einen Arduino Leonardo dieses Zeichen erzeugen (Taster an Pin 2 und GND):
// Mit einem Arduino Leonardo soll folgendes
// Zeichen erzeugt werden: ÿ
// Mit einer PC-Tastatur geht das prinzipiell z.B. so:
// ALT halten und am Numpad eintippen:
// 0159
// ALT loslassen.
// Der Leonardo soll das auch so machen.
/* Scancode Zuordnung press/write
-----------------------------------------
0x59 = Zehnertastatur: 1: 0xE1
0x5a = Zehnertastatur: 2: 0xE2
0x5b = Zehnertastatur: 3: 0xE3
0x5c = Zehnertastatur: 4: 0xE4
0x5d = Zehnertastatur: 5: 0xE5
0x5e = Zehnertastatur: 6: 0xE6
0x5f = Zehnertastatur: 7: 0xE7
0x60 = Zehnertastatur: 8: 0xE8
0x61 = Zehnertastatur: 9: 0xE9
0x62 = Zehnertastatur: 0: 0xEA
*/
#include "Keyboard.h"
void setup() {
pinMode(2, INPUT_PULLUP);
Keyboard.begin();
}
void loop() {
if (!digitalRead(2)) {
Keyboard.press(KEY_LEFT_ALT);
Keyboard.write(0xEA); // Numpad 0
Keyboard.write(0xE1); // Numpad 1
Keyboard.write(0xE5); // Numpad 5
Keyboard.write(0xE9); // Numpad 9
delay(100);
Keyboard.releaseAll();
delay(1000);
}
}