Главная chevron_right Уроки chevron_right Встроенные примеры chevron_right USB chevron_right Keyboard Serial: отправка символа через USB-клавиатуру

Keyboard Serial: отправка символа через USB-клавиатуру

Пример для Arduino Leonardo/Micro/Due: плата читает байт из Serial-монитора и отправляет компьютеру следующий символ как нажатие клавиши.

Этот пример показывает, как превратить Arduino в USB-клавиатуру и отправлять нажатия клавиш прямо в операционную систему. Плата ждёт байт из последовательного порта, а получив его — отсылает компьютеру символ с кодом на единицу выше. Если отправить a, в ответ придёт b; отправите 1 — получите 2. Простая и наглядная демонстрация возможностей библиотеки Keyboard.

Важно! Когда вы вызываете Keyboard.print(), плата Leonardo, Micro или Due перехватывает управление клавиатурой вашего компьютера. Чтобы не потерять контроль над системой, всегда предусматривайте надёжный механизм остановки скетча до вызова функций клавиатуры. В этом примере нажатие клавиши происходит только после получения байта по Serial — это и есть такой механизм безопасности.

Необходимое оборудование

Схема подключения

Подключите плату к компьютеру кабелем micro-USB.

После загрузки скетча откройте Serial Monitor, введите любой символ и нажмите «Отправить». Плата ответит нажатием клавиши со следующим символом — он появится в том окне, которое сейчас активно на вашем компьютере.

На схеме показаны все выводы платы: IOREF, RESET, 3.3V, 5V, GND, Vin, аналоговые A0–A5 и цифровые пины 2–13, TX>1, RX<0, SCL, SDA, AREF. Внешних компонентов не требуется — достаточно одного USB-кабеля.

Код

/*

  Тест клавиатуры

  Для Arduino Leonardo, Micro или Due

  Считывает байт из последовательного порта и отправляет нажатие клавиши в ответ.

  Отправляемый символ на один больше полученного: например, если отправить a,

  придёт b, отправить A — придёт B, и так далее.

  Схема:

  - не требуется

  создан 21 Oct 2011

  изменён 27 Mar 2012

  автор Tom Igoe

  Этот пример кода находится в общественном достоянии.

  https://www.arduino.cc/en/Tutorial/KeyboardSerial

*/

#include "Keyboard.h"

void setup() {

  // открыть последовательный порт:

  Serial.begin(9600);

  // инициализировать управление клавиатурой:

  Keyboard.begin();
}

void loop() {

  // проверить наличие входящих данных по Serial:

  if (Serial.available() > 0) {

    // считать входящие данные по Serial:

    char inChar = Serial.read();

    // напечатать следующий ASCII-символ относительно полученного:

    Keyboard.write(inChar + 1);

  }
}

Как это работает

  1. В setup() инициализируется Serial на скорости 9600 бод и запускается библиотека Keyboard.
  2. В loop() скетч проверяет Serial.available() — есть ли непрочитанные байты в буфере.
  3. Если байт есть, он считывается через Serial.read() в переменную.
  4. Функция Keyboard.write() отправляет компьютеру символ с кодом incomingByte + 1.

Вся логика намеренно проста: плата ничего не делает, пока вы не отправите команду вручную. Это гарантирует, что нежелательные нажатия клавиш не появятся в случайный момент.

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

  • Только совместимые платы. Библиотека Keyboard работает исключительно на платах с нативной поддержкой USB HID: Leonardo, Micro, Due и аналогах. На Uno или Nano этот скетч не скомпилируется.
  • Активное окно важно. Символ-ответ вводится туда, где сейчас стоит курсор. Перед отправкой убедитесь, что у вас открыт текстовый редактор или другое безопасное поле ввода — иначе символы попадут в адресную строку браузера, строку поиска и т. д.
  • Serial Monitor vs. нативный порт. Arduino Leonardo имеет два USB-порта: программный (ATmega32u4) и нативный. Убедитесь, что Serial Monitor открыт на правильном порту.
  • Граничные значения кодов. Если отправить символ ~ (код 126), плата пришлёт символ с кодом 127 (DEL). Следите за границами таблицы ASCII, чтобы избежать неожиданных управляющих символов.

Типичные ошибки

ПроблемаВероятная причинаРешение
Скетч не компилируетсяПлата не поддерживает HIDИспользуйте Leonardo, Micro или Due
Символы появляются не тамНеверное активное окноПереключитесь в нужное поле ввода перед отправкой
Плата не видна в Serial MonitorВыбран не тот COM-портПроверьте список портов в IDE после подключения
Символ не совпадает с ожидаемымОтправляется несколько байт (включая \n)В Serial Monitor отключите добавление символа новой строки

Как проверить результат

  1. Загрузите скетч на Leonardo или Micro.
  2. Откройте Serial Monitor (Ctrl+Shift+M), выберите скорость 9600.
  3. Откройте Блокнот или любой текстовый редактор — он должен быть активным окном.
  4. Вернитесь в Serial Monitor, введите a и нажмите «Отправить».
  5. В текстовом редакторе должна появиться буква b.

Если всё работает корректно — вы успешно управляете клавиатурой компьютера с помощью Arduino!

Дополнительные материалы

Другие базовые примеры можно найти в разделе built-in examples.

Подробное описание всех функций и констант доступно в language reference.

Последнее обновление: 11.08.2015, SM