Главная » Arduino
Призовой фонд
на август 2019 г.
1. 1000 руб
Паяльник
2. Тестер компонентов MG328
Паяльник
3. 200 руб.
От пользователей

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 устройство

 

Кнопка

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

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

Корпус

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

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

Свой среди 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);
  // Определяем кнопку как вход с подтягивающим резистором
  // Что такое подтягивающий резистор и для чего он нужен можно прочитать здесь:
  // http://cxem.net/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 апреля, которая будет нажимать клавиши через определенные интервалы. Такая штучка доставит вашей цели кучу незабываемых эмоций. Только тсс, я этого не говорил.

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

Теги:

Опубликована: 0 0
Я собрал 0 1
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 5 Проголосовало: 1 чел.

Комментарии (9) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
0
andro #
А можно ли сделать диджейский пульт на этой основе?
Ответить
0

[Автор]
Симилячник #
Конечно! Есть библиотека, которая позволяет использовать Arduino как MIDI устройство. Вот тут можно посмотреть реализацию.
Отредактирован 14.12.2017 13:43
Ответить
+1
andro #
Вам конечно спасибо, но это не совсем то. Хотелось бы ещё вертушки скажем на энкодерах.
Ответить
0
vavaav #
Можно использовать контроллер от сломанной клавиатуры.
Ответить
+1
Pauk #
Каким образом?
Ответить
+1
vavaav #
Была статья о использовании контроллера от клавиатуры
http://cxem.net/comp/comp191.php
Ответить
0
Pauk #
Неплохо...
Ответить
0
sany #
Спасибо за статью, очень полезно. Подскажите что дописать в коде, чтобы при удержании кнопки отправлялась только одна команда в порт а не множество.
Например: Нажал и удерживаю кнопку ушла команда Keyboard.press('n'), когда отпустил ушла другая Keyboard.press('a').
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется сила тока?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Arduino UNO
Arduino UNO
Бокс для хранения компонентов Мультиметр DT9205A
вверх