Keyboard.releaseAll()
Keyboard.releaseAll() отпускает все клавиши, удерживаемые через Keyboard.press(), — один вызов в конце комбинации гарантирует, что ни одна клавиша не «залипнет».
Полная статья
Описание
Keyboard.releaseAll() отпускает разом все клавиши, которые на данный момент удерживает библиотека Keyboard — то есть те, что были зажаты через Keyboard.press() и ещё не освобождены явно. Это самый надёжный способ привести клавиатуру в исходное состояние после серии нажатий.
Особенно удобно при работе с горячими клавишами вроде Ctrl+N, Ctrl+S или Shift+F2: вместо того чтобы отпускать каждую клавишу вручную, достаточно одного вызова Keyboard.releaseAll() в конце комбинации.
Синтаксис
Keyboard.releaseAll()
Параметры
Нет
Возвращает
Ничего
Пример кода
#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);
}
Где применяется
- Завершение горячих клавиш и макросов — чтобы гарантированно отпустить все клавиши после комбинации.
- Аварийный сброс состояния после нескольких последовательных
Keyboard.press(), если логика программы стала сложной. - Сценарии, где набор удерживаемых клавиш зависит от условий во время выполнения — проще отпустить всё сразу, чем отслеживать, что именно зажато.
Практические замечания
- Возьмите за правило: каждый блок с
Keyboard.press()завершать вызовомKeyboard.releaseAll(). Это исключает ситуацию, когда клавиша «залипает» из-за прерванного выполнения скетча. Keyboard.releaseAll()не генерирует новые символы и не нажимает ничего — функция лишь сообщает компьютеру, что все ранее удерживаемые клавиши теперь отпущены.- Если скетч может уйти в другой режим работы или прерваться по условию, вызывайте
Keyboard.releaseAll()перед переходом — иначе компьютер продолжит считать часть клавиш зажатыми. - Для точечного управления конкретной клавишей есть
Keyboard.release(key), но когда нужно гарантированно очистить всё состояние,releaseAll()проще и надёжнее.