arduino keyboard press коды клавиш
Ардуино и клавиатуры (полный гайд)
Привет, жители Хабра! Сегодня я решил сделать полный гайд по клавиатурам для Arduino.
Внимание! Статья ориентирована преимущественно на новичков!
Во многих проектах появляется необходимость создания возможности ввода данных пользователем. Если вам нужно реализовать большое количество кнопок(относительно), то подключать их по-отдельности становится и долго, и нерационально. Для этой цели лучше выбрать какую-нибудь клавиатуру, но как и к любому выбору, к нему нужно подходить осознано. Какие же бывают виды клавиатур и как с ними взаимодействовать?
Глобально, все модули данного типа можно поделить на две большие категории: матричные и аналоговые.
Матричные клавиатуры
Самый простой, дешёвый и популярный вид клавиатур. Он относительно прост в изготовлении и заполняет собой большую часть рынка модулей ардуино. Выглядит чаще всего следующим образом:
Принцип работы
Понять как устроена данная клавиатура можно изучив следующую схему:
Чтобы понять какая кнопка была нажата, нужно подавать сигнал на первые четыре контакта модуля и смотреть какой сигнал возвращается со второй. Но не стоит пугаться того, что вам придется писать алгоритмы обработки для восьми пинов вручную — в этом нам поможет готовая библиотека «keypad.h», благодаря которой нам не придется изобретать велосипед.
Подключение к плате
Подключение собственно модуля
В этой статье я воспользуюсь следующей схемой подключения:
У Вас наверное возникает вопрос: «Почему я решил использовать пины со второго по девятый, пропустив нулевой и первый?» — дело в том, что некоторые модули, используют их в качестве каналов RX и TX для получения и передачи данных соответственно. К примеру, блютуз модуль. Поэтому с учётом возможного дополнения проекта другими модулями, было решено оставить данные пины подключения свободными.
Написание скетча
После установки приступаем к написанию скетча:
Плюсы и минусы
Минусы
Плюсы
Аналоговые клавиатуры
Принцип работы
В аналоговых клавиатурах для изменения уровня напряжения используются резисторы, а сигнал выходит по одному каналу, который подключается в, собственно, аналоговый пин на плате. Как всё устроено можно понять взглянув на следующую схему:
Подключение к плате
Подключение выполняется очень просто, но может изменятся в зависимости от конкретной клавиатуры. В этой статье я буду рассматривать пример использование этой китайской аналоговой клавиатуры с али.
Итак: аналоговый выход клавиатуры соединяем с любым аналоговым пином на плате, контакт VCC на плате соединяем с 3.3V(не смотрите на надпись на самой клавиатуре, которая гласит о 5V — это ошибка), а GND на плате с GND на модуле. Вы можете воспользоватся следующей схемой:
Написания скетча
Здесь не нужно использовать сторонние библиотеки, т.к. всё предельно просто и понятно. Вот собственно и сам код, который считывает нажатую кнопку и выводит её номер, от 1 до 16(слева на право, с верху в низ) либо 0 если ничего не нажато, в монитор порта.
Плюсы и минусы
Плюсы
Минусы
Итоги
Лично я рекомендую использовать именно аналоговые клавиатуры, так как они чаще-всего более качественные и подключать их проще-простого. Главное обращать внимание на таблицу значений нажатых кнопок, которую предоставляет производитель или же, если таковой нет, можно сделать эти замеры самостоятельно, выводя значения из аналогового порта в монитор порта, чтобы потом использовать их в коде. Но выбор, всегда остается за Вами: использовать стандартный дешёвый вариант либо переплатить ради значительных плюсов в некоторых ситуациях.
На этом у меня всё. Оставляйте свои вопросы в комментариях, пишите своё мнение и встретимся на просторах Хабра!
Статья Учим BadUSB работать с разными раскладками клавиатуры
Всем доброго времени суток, о BadUsb, Usb Rubber Ducky и о том, как самому сделать аналог данного устройства написано уже много статей.
В этой же статье мы рассмотрим решение проблемы BadUsb при работе с разными раскладками клавиатуры. В качестве инструкции по созданию своего BadUsb будем использовать статью размещенную здесь, на codeby:
Если при выполнении скрипта загруженного на наш BadUsb в операционной системе выставлена русская раскладка, возникает проблема, все команды вводятся в русской раскладке и наш скрипт становится бесполезным.
Ищем решение этой проблемы
Например, зажимаем ALT и удерживая набираем цифры на цифровом блоке Numpad 1 и 3, затем отпускаем ALT и получается вот такой символ ноты ♪ и т.д.
Вот неполная таблица Alt-кодов, полную таблицу можно посмотреть по ссылке: Полная таблица Alt-кодов
Но сначала немного теории, поговорим о том как наша ардуинка эмулирует нажатия клавиш. В большинстве случаев делает она это с помощью базовой библиотеки Keyboard.h, которая по умолчанию уже встроена в Arduino IDE и подключается в самом начале скетча:
Изучив документацию к библиотеке Keyboard.h выясняем, что она использует ASCII коды для «печатаемых» символов клавиатуры.
Здесь по ссылке вы можете найти списки кодов USB HID для различных устройств ввода-вывода USB HID Usage Tables (pdf документ). Список кодов конкретно для клавиатуры, начиная со стр. 53 и находим в таблице клавиши цифрового блока и их Usege ID (Dec) в десятичной системе счисления.
Это и есть то что нам нужно, и как мы помним все значения ниже 128 обрабатываются как ASCII коды, поэтому не забываем прибавлять 136 к Usage ID (Dec).
Получившиеся значения от 225 до 234 и 219 (для NumLock) мы и будем использовать для написания скетча для ардуино.
В библиотеке Keyboard.h есть несколько основных функций которые эмулируют нажатия клавиш:
В итоге код который будет эмулировать нажатие клавиш клавиатуры с помощью Alt-кодов будет выглядеть следующим образом
Например для английской буквы n или ALT + 110 (смотрим таблицу Alt-кодов):
Да, многовато кода, 5 строк чтобы написать всего одну букву!
Получится довольно длинный скетч, но он повторяющийся и его можно немного оптимизировать. Такой код уже напечатает полное слово «notepad».
Конечно мы не будем все это писать вручную, в интернете можно найти много реализаций DuckyScript to Arduino code конвертера с открытым исходным кодом, я модифицировал одну из версий такого конвертера и добавил поддержку Alt-кодов. За основу взял ducky2arduino_stable от roothaxor.
Эти тестовые примеры запускают notepad и печатают Hello World.
Сделайте свои собственные кнопки быстрого доступа с Arduino
Скромный Arduino может многое, но знаете ли вы, что он может эмулировать USB-клавиатуру? С помощью этой простой схемы вы можете объединить те, которые трудно запомнить длинные сочетания клавиш, в одну настраиваемую комбинацию клавиш. Вот конечный результат:
Никогда не использовал Arduino раньше? Ознакомьтесь с нашим руководством по началу работы
Что вам нужно
Вот что вам нужно, чтобы сделать этот проект:
Вам понадобится очень специфическая Arduino для этого проекта. Я использую Pro Micro, так как они такие маленькие и дешевые, что вам нужен Arduino с встроенным в процессор USB-Serial (Atmega32u4). Можно построить этот проект с другими Arduinos, такими как UNO или Nano, однако для того, чтобы все заработало, требуется много напряженной работы, чтобы заново прошить биос и покопаться. Клоны других моделей Arduino обычно не работают вообще, но клон Pro Micro тоже подойдет.
Вот схема макета (исключая концевые отведения):
Убедитесь, что вы вырезали следы под резисторами и Arduino. Так как считывание схемы платы может быть очень трудным, вот макетная версия:
Это плотная посадка, чтобы сжать все компоненты в такое маленькое пространство. Отрежьте углы вашего картона следующим образом:
Это должно аккуратно вписаться в нижней части корпуса:
Убедитесь, что дорожки движутся вертикально.
Подключить анод (длинная нога, позитив) светодиода к резистору 200 Ом, а затем к +5 В. Подключите катод (короткая нога, негатив) К земле, приземляться. Накройте ножки термоусадочной трубкой, а затем вставьте держатель в светодиод. Нет необходимости в каком-либо клее, однако ваш светодиодный держатель может быть не плотным, поэтому вам, возможно, придется адаптировать эти инструкции.
Вместо этого вы можете использовать двухцветный светодиод — это позволит вам настроить два или более банков переключателей, с разными цветными индикаторами состояния для каждого банка.
Теперь пришло время припаять все светодиоды для клавишных колпачков. Они используются исключительно для того, чтобы клавиши светились, поэтому вы можете пропустить их, если хотите, и их не нужно подключать к цифровому выводу, только для питания. Соедините все аноды вместе и все катоды вместе. Учитесь на моей ошибке — это гораздо проще сделать, прежде чем подключать коммутаторы! Подсоедините аноды к +5 В через резистор 220 Ом, а катоды заземлите. Эти светодиоды подключены параллельно. Вот схема только для этих светодиодов:
Используйте маленький кусочек термоусадочной трубки, чтобы закрыть соединение между светодиодами и Arduino:
Включите Arduino для проверки работы всех светодиодов. Вам не нужно загружать любой код. Если какие-либо светодиоды не работают, проверьте и перепроверьте проводку.
Эта схема одинакова для всех девяти переключателей. Подключите переключатели к цифровым контактам с 2 по 10, каждый со своим собственным резистором 10К на землю. Будьте осторожны при пайке переключателей Cherry MX, они могут быть немного хрупкими, у меня несколько контактов сломалось. Возможно, вы захотите припаять их непосредственно к еще большему количеству полос, но концевые выводы все еще подходят.
Вот и все для проводки. Возможно, вы захотите смонтировать гнездо USB типа B, однако крошечные контакты на них часто довольно трудно паять. Если вы не хотите этого делать, не беспокойтесь. Разъем Micro USB на Arduino аккуратно подходит к отверстию в корпусе. Если вас немного смущают разные типы USB, убедитесь, что вы понимаете различия
Наконец, дважды проверьте правильность схемы. Короткий может легко уничтожить Arduino, и это может быть легко сделать с помощью картона.
Теперь проверьте правильность схемы. Это хорошая идея сделать это, прежде чем продолжить, так что вы можете исправить любые проблемы, пока можете. Загрузите этот тестовый код (не забудьте выбрать правильную плату и порт из инструменты > доска а также инструменты > порт меню):
Возможно, вам придется изменить контакты, если вы изменили схему.
После загрузки откройте серийный монитор (в правом верхнем углу > Серийный монитор). Один за другим, нажмите каждую кнопку. Вы должны увидеть на серийном мониторе номер кнопки, которую вы нажали. Как и в случае со светодиодом, если ваш компьютер жалуется на слишком большой ток или светодиоды гаснут, когда вы нажимаете кнопку, немедленно отключайтесь! У вас есть короткое замыкание где-то в цепи, дважды проверьте правильность цепи и нет ли коротких замыканий между соединениями.
Если все работает, продолжайте и вставьте схему в коробку. Вы можете использовать немного клея, чтобы удержать цепь на месте (хотя провода держали мои в порядке). Закрепите крышку также.
Сделать Arduino похожей на клавиатуру очень просто. Если вы используете Nano или UNO, вы собираетесь перепрограммировать Arduino, используя Обновление прошивки устройства (DFU). Обычно используется для прошивки новой прошивки на Arduino. Вы собираетесь использовать его для прошивки Arduino новой прошивкой, которая заставит его работать как клавиатура. Это не будет рассмотрено здесь, так как это довольно сложная задача. На сайте Arduino есть хороший учебник для этого.
Arduino Pro Micro делает этот шаг очень простым. Логика, необходимая для эмуляции клавиатуры USB, уже встроена в процессор, поэтому это так же просто, как написать некоторый код!
Сначала настройте ключи:
Это массив, содержащий все контакты, к которым подключены кнопки. Если вы использовали больше или меньше кнопок или использовали другие контакты, измените значения здесь.
Теперь инициализируйте все контакты как входы:
Это говорит Arduino, что все выводы в массиве являются входными. Для этого используется цикл, а не запись pinMode (2, INPUT) девять раз, ты должен написать это только один раз. Это также вызывает Keyboard.begin. Это устанавливает функцию, встроенную в библиотеку Arduino, разработанную специально для эмуляции клавиатуры.
Создайте метод с именем readButton:
Теперь другой цикл for вызывается внутри void loop ():
Опять же, это перебирает каждый элемент в массиве и проверяет, был ли он нажат. Это называется readButton метод, который вы создали ранее. Если кнопка была нажата, она передает этот номер пина другому методу, называемому DoAction:
Это проверяет номер булавки, используя переключатель заявление. Переключатель операторов (иногда называется выключатель) похожи на если оператора, однако они полезны для проверки того, что одна вещь (в данном случае номер булавки) равна одному из нескольких разных результатов. По сути, они гораздо быстрее для расчета.
Основные компоненты находятся внутри этого оператора switch. Keyboard.println записывает текст на компьютер, как будто вы физически набираете каждую клавишу. Keyboard.press нажимает и удерживает одну клавишу Не забудьте выпустить их, используя Keyboard.releaseAll после небольшой задержки!
В дополнение ко всем цифровым и буквенным клавишам Arduino может нажимать большинство специальных клавиш, называемых Модификаторы клавиатуры. Это особенно полезно для нажатия сочетаний клавиш. На сайте Arduino есть полезный список.
Теперь осталось только создать несколько ярлыков. Вы можете сопоставить это с существующими ярлыками, такими как Alt + F4 (закрыть программу в Windows) или Cmd + Q (выйти из программы macOS). Кроме того, убедитесь, что вы прочитали наше окончательное руководство по сочетанию клавиш
, как создать ярлыки Windows
и каждый ярлык Chromebook
чтобы начать делать свои собственные ярлыки.
Вы создали свой собственный ярлык? Дайте мне знать в комментариях, я хотел бы увидеть некоторые фотографии!
Arduino keyboard press коды клавиш
The Keyboard.write() and Keyboard.press() and Keyboard.release() commands don’t work with every possible ASCII character, only those that correspond to a key on the keyboard. For example, backspace works, but many of the other non-printable characters produce unpredictable results. For capital letters (and other keys), what’s sent is shift plus the character (i.e. the equivalent of pressing both of those keys on the keyboard).
A modifier key is a special key on a computer keyboard that modifies the normal action of another key when the two are pressed in combination.
For more on ASCII values and the characters or functions they represent, see asciitable.com
For multiple key presses use Keyboard.press()
The Leonardo’s definitions for modifier keys are listed below:
Key | Hexadecimal value | Decimal value |
KEY_LEFT_CTRL | 0x80 | 128 |
KEY_LEFT_SHIFT | 0x81 | 129 |
KEY_LEFT_ALT | 0x82 | 130 |
KEY_LEFT_GUI | 0x83 | 131 |
KEY_RIGHT_CTRL | 0x84 | 132 |
KEY_RIGHT_SHIFT | 0x85 | 133 |
KEY_RIGHT_ALT | 0x86 | 134 |
KEY_RIGHT_GUI | 0x87 | 135 |
KEY_UP_ARROW | 0xDA | 218 |
KEY_DOWN_ARROW | 0xD9 | 217 |
KEY_LEFT_ARROW | 0xD8 | 216 |
KEY_RIGHT_ARROW | 0xD7 | 215 |
KEY_BACKSPACE | 0xB2 | 178 |
KEY_TAB | 0xB3 | 179 |
KEY_RETURN | 0xB0 | 176 |
KEY_ESC | 0xB1 | 177 |
KEY_INSERT | 0xD1 | 209 |
KEY_DELETE | 0xD4 | 212 |
KEY_PAGE_UP | 0xD3 | 211 |
KEY_PAGE_DOWN | 0xD6 | 214 |
KEY_HOME | 0xD2 | 210 |
KEY_END | 0xD5 | 213 |
KEY_CAPS_LOCK | 0xC1 | 193 |
KEY_F1 | 0xC2 | 194 |
KEY_F2 | 0xC3 | 195 |
KEY_F3 | 0xC4 | 196 |
KEY_F4 | 0xC5 | 197 |
KEY_F5 | 0xC6 | 198 |
KEY_F6 | 0xC7 | 199 |
KEY_F7 | 0xC8 | 200 |
KEY_F8 | 0xC9 | 201 |
KEY_F9 | 0xCA | 202 |
KEY_F10 | 0xCB | 203 |
KEY_F11 | 0xCC | 204 |
KEY_F12 | 0xCD | 205 |
See Also
Corrections, suggestions, and new documentation should be posted to the Forum.
The text of the Arduino reference is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.
Mouse и Keyboard
Эти базовые библиотеки позволяют платам Arduino Leonardo, Micro или Due при подключении к компьютеру определяться как обычная мышь и/или клавиатура.
Предосторожности при использовании библиотек Mouse и Keyboard: при постоянной работе библиотек Mouse или Keyborad могут возникнуть сложности во время программирования вашего устройства.
Функции, подобные Mouse.move() или Keyboard.print() могут перемещать курсор и сигнализировать о нажатии клавиш подключенному компьютеру, поэтому должны вызываться только тогда, когда вы готовы контролировать их работу. Рекомендуется использовать какую-нибудь систему управления, позволяющую выключать подобную функциональность, например, в зависимости от положения переключателя или сигнала на выводе, состояние которого вы можете контролировать.
Перед использованием функций библиотек Mouse или Keyboard непосредственно с компьютером, лучше всего протестировать их возвращаемые значения с помощью функции Serial.print(). Так вы сможете удостовериться в правильности отправляемых значений. Подробнее см. примеры работы с библиотеками Mouse и Keyboard ниже.
Мышь (библиотека Mouse)
Функции для работы с мышью позволяют Leonardo, Micro или Due контролировать движение курсора на подключенном компьютере. Обновление позиции курсора всегда осущетсвляется относительно его предыдущего положения.
Клавиатура (библиотека Keyboard)
Функции для работы с клавиатурой позволяют Leonardo, Micro или Due отправлять подключенному компьютеру сигналы о нажатии клавиш.
Библиотека также поддерживает использование клавиш-модификаторов, которые при одновременном нажатии с другой клавишей изменяют ее поведение. Дополнительную информацию о поддерживаемых клавишах и их применении см. здесь.