Почему keyboard.h добавляет 136 к каждой клавише?
Я хочу создать собственную раскладку клавиатуры в официальной клавиатурной библиотеке Arduino.
Почему определения ключей добавляют 136 к каждому числу?
См. Keyboard_es_ES.h на github
#define KEY_MASCULINE_ORDINAL (136+0x35)
#define KEY_INVERTED_EXCLAMATION (136+0x2e)
#define KEY_GRAVE (136+0x2f)
#define KEY_N_TILDE (136+0x33)
#define KEY_ACUTE (136+0x34)
#define KEY_C_CEDILLA (136+0x31)
Глядя на таблицу ascii, я не вижу ничего особенного в значении 136
@spuder, 👍0
1 ответ
Лучший ответ:
Можно утверждать, что это деталь реализации библиотеки, что не нужно документировать. ;-) Так или иначе, вот причина...
Библиотека клавиатуры использует пользовательскую схему кодирования для представления
как символы, так и клавиши. Публичные методы press()
, release()
,
write()
, print()
и println()
интерпретируют предоставленные пользователем данные.
по этой схеме. При таком кодировании интерпретация
byte зависит от того, к какому из этих трех диапазонов он принадлежит:
Байты в диапазоне [0, 127] считаются ASCII. Символы. Это то, что позволяет вам писать такие вещи, как
Keyboard.println("Привет!");
. В библиотеке используется раскладка клавиатуры массив для сопоставления этих символов с кодами сканирования клавиш¹, возможно, измененными Shift или AltGr. Вы предоставляете указатель на этот массив в качестве аргумента дляначать()
.Байты в диапазоне [128, 135] интерпретируются как ключи-модификаторы, такие как
KEY_LEFT_CTRL
,KEY_RIGHT_SHIFT
и т. д. Обратите внимание, что эти клавиши не имеют правильных скан-кодов, так как их состояние передается в host как битовая карта (один байт для восьми ключей), а не как коды добавлено в список.Байты в диапазоне [136, 255] интерпретируются как необработанные коды сканирования. в диапазоне [0, 119], смещенном на 136. Это то, что позволяет вам активировать произвольные клавиши, такие как
KEY_PRINT_SCREEN
илиKEY_LEFT_ARROW
. Все скан-коды стандартной полноразмерной клавиатуры ПК (ANSI 104 или ISO 105) лежат в диапазоне [4, 101]: вы можете получить доступ ко всем их и даже некоторые другие, такие какKEY_F24
.
Относительно файла Keyboard_es_ES.h: коды там для клавиш.
которые соответствуют символам ASCII в раскладке США, но не соответствуют испанским
макет. Цель состоит в том, чтобы гарантировать, что каждый ключ ISO 105
клавиатуру можно активировать с помощью символа ASCII (например,
Keyboard.press('a');
) или макрос KEY_*
.
¹ Стандарт USB называет их «кодами использования», но старый термин «сканировать коды» кажется более распространенным.
- Arduino nano как клавиатура HID
- Keyboard.h не найден
- Нажать клавишу Windows, используя «keyboard.press();»
- Отправка мультимедийных клавиш клавиатуры с помощью библиотеки клавиатур
- Какие диоды использовать в матричном вводе кнопок/клавиш? (Изготовление игровой клавиатуры)
- NodeMCU поддерживает внедрение ключей?
- ESP8266: #include <Keyboard.h>вызывает фатальную ошибку: HID.h: No such file or directory
- Digispark ATtiny 85 - не распознается как HID устройство
Просто идея для самодокументирующегося источника, но я совершенно уверен, что вы знаете об этом. ;-) Вы можете использовать символические константы вместо магических чисел., @the busybee