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

Keyboard.write()

Keyboard.write() имитирует одиночное нажатие и отпускание клавиши — принимает символ или код клавиши; для сочетаний используйте Keyboard.press().

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

Описание

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

Функция принимает печатаемые ASCII-символы, их числовые коды, а также специальные константы клавиш из раздела Keyboard Modifiers and Special Keys — например, Enter или Esc. Если передать заглавную букву, библиотека автоматически добавит Shift, точно так же, как это происходит при обычном наборе текста.

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

Синтаксис

Keyboard.write(character)

Параметры

character: символ, его ASCII-код или константа специальной клавиши, которую нужно отправить. Один и тот же символ можно задать в нескольких эквивалентных формах:

    Keyboard.write(65);         // отправляет ASCII-значение 65, то есть A
    Keyboard.write('A');        // то же самое, что символ в кавычках
    Keyboard.write(0x41);       // то же самое в шестнадцатеричном формате
    Keyboard.write(0b01000001); // то же самое в двоичном формате (странный выбор, но работает)

Возвращает

Количество отправленных байтов. Тип данных: size_t.

Если функция вернула 0, значит символ не был отправлен — например, из-за того, что Keyboard.begin() не вызывался или передан неподдерживаемый код.

Пример кода

    #include <Keyboard.h>

    void setup() {
      // настроить пин 2 как вход и включить
      // подтягивающий резистор, чтобы на нём был HIGH, если
      // не подключён к GND:
      pinMode(2, INPUT_PULLUP);
      Keyboard.begin();
    }

    void loop() {
      //если кнопка нажата
      if (digitalRead(2) == LOW) {
        //отправить ASCII-символ 'A',
        Keyboard.write(65);
      }
    }

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

  • Автоматический ввод текста — заполнение форм, терминальных команд или паролей по нажатию физической кнопки.
  • Навигация в интерфейсе — отправка Enter, Esc или стрелок для управления программами без мыши.
  • Горячие клавиши — запуск макросов в графических редакторах или IDE.
  • Учебные стенды — демонстрация HID-устройств без написания драйверов.

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

  • Keyboard.write() рассчитана на одиночное нажатие. Если нужно удерживать клавишу или отправить сочетание, используйте Keyboard.press() вместе с Keyboard.release() или Keyboard.releaseAll().
  • Число 97 будет интерпретировано как ASCII-код и отправит символ a, а не строку "97". Если хотите отправить именно цифру как символ, передавайте её в одинарных кавычках: '6'.
  • Результат зависит от раскладки клавиатуры, выбранной в операционной системе. Для корректной работы с национальными символами задайте нужную раскладку через Keyboard.begin(layout).
  • Перед тем как скетч начнёт автоматически отправлять нажатия, добавьте управляемый запуск: кнопку, тумблер или хотя бы задержку delay() после старта платы. Иначе при каждом подключении USB плата может неожиданно «напечатать» что-то в активном окне.