Arduino как HID устройство

До сих пор мы работали лишь с Arduino UNO. Да вот лишь то, что я сегодня покажу не работает с Arduino UNO.  На самом деле можно, конечно, но в таком случае нужно кое-чего подшаманить, а это кое-чего не так-то и просто. Что же тогда делать? А вот что.

Кроме Arduino UNO существует множество других версий Arduino. Это и Arduino Nano или Mini, когда размер имеет значение, и Arduino Mega, когда пинов и ресурсов на UNO уже не хватает, а ещё нужно подключить килограмм датчиков. А если форм-фактор UNO уж больно нравится, а аналоговых пинов не хватает, то на помощь придет Leonardo.

На Leonardo мы сегодня и остановимся. Отличие Leonardo от UNO не лишь в дополнительных аналоговых пинах, но и в архитектуре. На Leonardo доступен виртуальный Serial port. Что это нам дает? Как минимум то, что 1 и 0 пины, которые отвечают за соединение с компьютером на UNO остаются свободными, а при открытии Serial соединения плата не перезагружается. Примите это во внимание. И главный козырь – компьютер считает Leonardo за HID устройство (Human interface device), а это говорит о том, что Leonardo может притвориться клавиатурой или мышью. Это свойство то мы и будем использовать.

Предыстория

Я люблю играть на электрогитаре. Часто играю в программе Guitar rig. Эта программа является виртуальным гитарным процессором, то есть обрабатывает звук с гитары. К чему все это. При игре нужно переключаться между пресетами, а руки то заняты. Есть решение – приобрести контроллер для этой программы, вот лишь он больше не выпускается, да и стоит прилично. А что если соорудить педаль самому? Вот что из этого получилось.

Нам понадобятся

Arduino Leonardo или его аналоги

Главное – чтобы плата определялась как HID устройство

 

Кнопка

Тут уж по вашему вкусу

Соединительные провода

Корпус

Тут есть где разгуляться дизайнерской мысли. Я решил не заморачиваться особо и соорудил подобие педали из 2-х фанерок, обильно смазанных термоклеем. Побаловаться – в самый раз.

Пол царства за термоклей.

Свой среди HID

Как я уже и говорил, Leonardo может притворяться клавиатурой или мышью. Это осуществляется с помощью встроенной библиотеки. Ниже приведен пример кода. Попробуйте запустить его у себя на компьютере. Должна произойти странная вещь.

// Подключаем библиотеку для управления клавиатурой
#include «Keyboard.h»

void setup()
{
// Стартуем
Keyboard.begin();
delay(3000);

// Выделяем весь документ
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(‘a’);
delay(500);
Keyboard.releaseAll();

// Стираем текст
Keyboard.write(KEY_BACKSPACE);
delay(500);

// Пишем сообщение
Keyboard.println(«Te he.I am controlling your keyboard»);
delay(1000);

// Выделяем весь документ
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(‘a’);
delay(500);
Keyboard.releaseAll();

// Пишем сообщение
Keyboard.println(«Goodbye!»);
delay(1000);
// Выделяем весь документ
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(‘a’);
delay(500);
Keyboard.releaseAll();

// Стираем текст
Keyboard.write(KEY_BACKSPACE);
delay(500);
Keyboard.releaseAll();

// Сохраняем документ
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(‘s’);
delay(500);
Keyboard.releaseAll();

// Чтобы откатить все назад, нажмите ctrl + z несколько раз
}

void loop()
{
}

Не спешите бежать и рассказывать о восстании машин. Так и было задумано. Теперь разберемся как это работает.

Keyboard.press(button) – эта команда говорит Leonardo о том, что нужно нажать кнопку на клавиатуре. Аргументом принимает букву или специальное обозначение клавиши. KEY_LEFT_CTRL – это левый Ctrl, например. Все обозначения можно посмотреть тут.

Можно нажимать комбинации клавиш. Для этого пропишите несколько строк кода с нужными клавишами. К примеру, чтобы сохранить текст есть комбинация Ctrl + s, Leonardo тоже сможет сохранить текст если выполнить такой код:

Keyboard.press(“s”);
Keyboard.press(KEY_LEFT_CTRL);

Keyboard.releaseAll() – команда говорит Leonardo отпустить клавиши. Заметьте, что предыдущая команда говорит Leonardo лишь о нажатии клавиши. Если не прописать Keyboard.releaseAll(), то клавиша будет зажата и дальше. Прямо как в реальности. Попробуйте открыть текстовый редактор и зажать клавишу.

Keyboard.println(«Some text«) – эта команда отвечает за печать текста. Тут все предельно ясно. Работает как Serial.println.

Там есть и другие функции, но эти – самые основные. Их нам хватит, чтобы сделать педаль для гитары. Если кому интересно, что ещё есть в этой библиотеке или в похожей для мыши, то можно открыть примеры/USB и почитать тут. Переходим к сборке педали.

Схема

С конструкцией можно подумать, а схема устройства крайне проста. Ниже приведена схема на макетке.

Код

// Подключаем библиотеку для работы с Leonardo как с клавиатурой
#include «Keyboard.h»

// Определяем пин кнопки
#define BUTTON_PIN A0
// Создаем переменную для считывания показаний с кнопки
bool button = 0;

void setup()
{
// Открываем соединение с COM портом
Serial.begin(9600);
// Определяем кнопку как вход с подтягивающим резистором
// Что такое подтягивающий резистор и для чего он нужен можно прочитать здесь:
// /me/arduino/arduino185.php
pinMode(BUTTON_PIN, INPUT_PULLUP);
}

void loop()
{
// Считываем показания с кнопки
button = digitalRead(BUTTON_PIN);

// Помним, что в отпущеном состоянии значение на кнопке равно 1
if(!button)
{
// Отправляем клавишу в Serial. Я решил отправлять n
// Для некоторых клавиш есть специальные обозначения.
// К примеру, чтобы отправить левый Shift, вы должны написать такую команду — Keyboard.press(KEY_LEFT_SHIFT );
// Коды для других клавиш приведены здесь
// https://www.arduino.cc/en/Reference/KeyboardModifiers
Keyboard.press(‘n’);
// Ждем немного
delay(10);
}
else
{
// Когда кнопка отпущена — отправляем команду остановить все нажатия
Keyboard.releaseAll();
}
}

Видео

На видео показан тест устройства в Microsoft Word и использование в качестве педали для переключения пресетов в guitar Rig 5. Для этого я создал новый контроллер, запомнил клавишу и задал действие.

Итог

Оказывается, существуют и другие Arduino, не менее полезные, а где-то и более полезные чем UNO.

Используя Leonardo в качестве клавиатуры или мыши можно создавать интересные вещи. К примеру, флешку-розыгрыш на 1 апреля, которая будет нажимать клавиши через определенные интервалы. Такая штучка доставит вашей цели кучу незабываемых эмоций. Только тсс, я этого не говорил.


Прикрепленные файлы:

Добавить комментарий

Ваш адрес email не будет опубликован.