Главная chevron_right Функции chevron_right USB chevron_right Keyboard.release()

Keyboard.release()

Keyboard.release() отпускает конкретную клавишу, зажатую через Keyboard.press(), — это нужно для сочетаний вроде Ctrl+C, где клавиши удерживаются по очереди.

Полная статья

Описание

Keyboard.release() отпускает одну конкретную клавишу, которая была зажата через Keyboard.press(). Это нужно для сочетаний клавиш и сценариев, где клавиша должна оставаться удержанной некоторое время.

Когда вы вызываете Keyboard.press(), клавиша остаётся «зажатой» с точки зрения компьютера до тех пор, пока вы явно не отпустите её — именно для этого и нужен Keyboard.release(). Типичный пример: нажать Ctrl+C означает сначала зажать Ctrl, затем нажать C, а потом последовательно отпустить обе клавиши.

Если нужно отпустить сразу все зажатые клавиши, используйте Keyboard.releaseAll().

Синтаксис

Keyboard.release(key)

Параметры

key: клавиша, которую нужно отпустить. Допустимый тип данных: char. Можно передавать обычный символ ('a', 'Z') или специальную константу, например KEY_LEFT_CTRL, KEY_RETURN, KEY_F2.

Возвращает

Количество успешно отпущенных клавиш. Тип данных: 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.release(ctrlKey);
      Keyboard.release('n');
      // ожидать открытия нового окна:
      delay(1000);
    }

Где применяется

  • Управление сочетаниями клавиш, где важно отпустить модификатор позже обычной клавиши.
  • Игровые контроллеры и панели управления, где клавиша удерживается ровно столько, сколько нажата физическая кнопка.
  • Макропады, которые имитируют длинное удержание Shift, Ctrl, Alt или другой служебной клавиши.

Практические замечания

  • Отпускайте ту же клавишу, которую передавали в Keyboard.press(): аргументы должны совпадать — и по значению, и по типу.
  • Если после серии нажатий нужно гарантированно сбросить состояние клавиатуры, проще вызвать Keyboard.releaseAll() — он отпустит всё сразу.
  • Забытый release() оставит клавишу «зажатой» на стороне компьютера до тех пор, пока скетч не отпустит её или плата не будет отключена. Это частая причина странного поведения системы после загрузки скетча.
  • Для одиночного краткого нажатия чаще подходит Keyboard.write(): он нажимает и отпускает клавишу за один вызов, без необходимости вручную управлять состоянием.