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

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 подтверждение того, какая клавиша была нажата и отпущена — это помогает убедиться в правильном порядке вызовов.