Keyboard.press()
Keyboard.press() зажимает клавишу и удерживает её до явного вызова Keyboard.release() или Keyboard.releaseAll() — удобно для имитации сочетаний вроде Ctrl+C или Shift+A.
Полная статья
Описание
Keyboard.press() имитирует физическое нажатие клавиши, которая остаётся зажатой до тех пор, пока вы явно её не отпустите. Это принципиально отличается от Keyboard.print() или Keyboard.write(), которые сами нажимают и отпускают клавишу за один вызов.
Функция особенно полезна при работе с клавишами-модификаторами — например, чтобы сымитировать Ctrl+C, Shift+A или любое другое сочетание клавиш: сначала удерживаете одну клавишу через Keyboard.press(), затем нажимаете вторую, а после — отпускаете обе через Keyboard.release() или Keyboard.releaseAll().
Перед первым использованием press() обязательно вызовите Keyboard.begin() — без инициализации клавиатура не будет работать.
Синтаксис
Keyboard.press(key)
Параметры
key: клавиша, которую нужно зажать. Допустимый тип данных: char. Можно передавать как обычный символ ('a', '1'), так и специальные константы для служебных клавиш — например, KEY_LEFT_CTRL, KEY_SHIFT, KEY_RETURN.
Возвращает
Количество успешно отправленных нажатий. Тип данных: size_t. Если клавиша не была зарегистрирована (например, превышен лимит одновременно удерживаемых клавиш), функция вернёт 0.
Пример кода
#include <Keyboard.h>
// используйте этот вариант для OSX:
char ctrlKey = KEY_LEFT_GUI;
// используйте этот вариант для Windows и Linux:
// char ctrlKey = KEY_LEFT_CTRL;
void setup() {
// настроить пин 2 как вход и включить
// подтягивающий резистор, чтобы на нём был HIGH,
// если не подключён к GND:
pinMode(2, INPUT_PULLUP);
// инициализировать управление клавиатурой:
Keyboard.begin();
}
void loop() {
while (digitalRead(2) == HIGH) {
// ничего не делать, пока пин 2 не перейдёт в LOW
delay(500);
}
delay(1000);
// новый документ:
Keyboard.press(ctrlKey);
Keyboard.press('n');
delay(100);
Keyboard.releaseAll();
// ожидать открытия нового окна:
delay(1000);
}
Где применяется
- Имитация горячих клавиш:
Ctrl+S,Alt+F4,Ctrl+Alt+Delи подобных комбинаций. - Удержание
Shiftдля ввода заглавных букв или символов верхнего регистра. - Автоматизация работы с интерфейсом ПК: навигация по меню, управление медиаплеером.
- Игровые контроллеры, где нужно удерживать клавишу движения на протяжении нескольких итераций
loop().
Практические замечания
- Клавиша остаётся зажатой до явного вызова
Keyboard.release()илиKeyboard.releaseAll(). Если забыть отпустить клавишу, компьютер будет воспринимать её как непрерывно удерживаемую — это может привести к неожиданному поведению. - Одновременно можно удерживать ограниченное число клавиш (обычно не более 6 обычных плюс модификаторы). При превышении лимита
Keyboard.press()вернёт0. - Всегда завершайте комбинацию вызовом
Keyboard.releaseAll(), если хотите гарантированно сбросить все зажатые клавиши — это надёжнее, чем отпускать каждую по отдельности. - Работает только на платах с нативной поддержкой USB HID (Leonardo, Micro, Due, платы на базе SAMD и других совместимых контроллерах). На Uno и Mega эта функция недоступна.
- Для отладки удобно выводить в
Serial Monitorподтверждение того, какая клавиша была нажата и отпущена — это помогает убедиться в правильном порядке вызовов.