Arduino jako klávesnice používá USB protokol pro klávesnici, ten sám je docela omezený (odesílá maximálně 6 kláves naráz + modifikátory (jako levý shift, pravý alt atd celkem 8 bitů=1byte) a docela složitý (
https://www.usb.org/documents?search=&i ... r_page=All
https://www.usb.org/sites/default/files ... id1_11.pdf Device Class Definition for HID 1.11
https://usb.org/sites/default/files/doc ... 1_12v2.pdf HID Usage Tables 1.12
)
V podstatě (kromě spousty režie) klávesnice posílá počítači toto ( viz Arduino/build/linux/work/libraries/Keyboard/src ) :
Keyboard.h :75
Kód: Vybrat vše
typedef struct
{
uint8_t modifiers;
uint8_t reserved;
uint8_t keys[6];
} KeyReport;
Aby to nebylo složité a lidi to nevyděsilo (=Arduino way), tak to je celé zabalené v něčem, co to umožní používat jednoduše, za cenu ztráty funkcionality a nepřesností - ta knihovna Keyboard - najděte si ji na svém počítači)
modifiers jsou různé "shifty" viz Keyboard.h :37 (akorát ta čísla (-0x80) odpovídají jednotlivým bitům)
Kód: Vybrat vše
#define KEY_LEFT_CTRL 0x80
#define KEY_LEFT_SHIFT 0x81
#define KEY_LEFT_ALT 0x82
#define KEY_LEFT_GUI 0x83
#define KEY_RIGHT_CTRL 0x84
#define KEY_RIGHT_SHIFT 0x85
#define KEY_RIGHT_ALT 0x86
#define KEY_RIGHT_GUI 0x87
Keyboard.cpp :86
Kód: Vybrat vše
const uint8_t _asciimap[128] =
Takže když zkoušíte psát ALT+0397 přez alt a číslice, tak vám to pochotitelně na té číslicové řadě nejde, (protože to počítač "vidí" jako ALT+éšíý a nedává mu to smysl).
Navíc knihovna Keyboard předpokládá vypnutý NumLock a šipky píše na něm (s tím, že aby poznala, že jde o "speciální znaky" tak jsou ty kódu posunuté o 136 nahoru a při použití od nich zase 136 odečte
Kód: Vybrat vše
#define KEY_UP_ARROW 0xDA
#define KEY_DOWN_ARROW 0xD9
#define KEY_LEFT_ARROW 0xD8
#define KEY_RIGHT_ARROW 0xD7
---
Shrnutí: USB klávesnice (ať už Arduino, nebo klasická) vůbec neví nic o rozložení znaků, nebo jaký jazyk se právě používá a jen odesílá, jaké klávesy byly namačkané. OS z toho nějak usoudí, jaké písmena (nebo jiné věci, jako multimediální, spuštění programů a podobně) by to asi tak mohlo znamenat (aniž by tušil, co je na klávesnici napsáno)
Arduino knihovna Keyboard dělá spoustu triků, aby to před uživatelem schovala a složitě a nepřesně předstírá, že umi psát písmena. Pro složitější věci doporučuju si projít její kód a buď ji ošidit, nebo si napsat vlastní, která to bude dělat požadovaným způsobem (není to až zas tak těžké)