Реклама ⓘ
Главная » Arduino
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Похожие статьи:


Реклама ⓘ

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 чел.

Комментарии (13) | Я собрал (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').
Ответить
0
Доброжелатель #
Используйте для обработки нажатия кнопок либы, например, гацвера. Там есть подобное
Ответить
0
Max #
Возможно ли изменить имя устройства?
Ответить
0
Н #
Первый код почему то не работает. Программа пишет: [Timeout. The IDE has not received the 'success' message from the monitor after successfully connecting to it. Could not connect to COM5 serial port.]. Подскажите как решить проблему пожалуйста?
Ответить
0
DarKaind #
Можно ли сделать так, чтобы воспринималось нажатие нескольких клавиш одновременно?
Например в гонках, зажав стрелку вверх можно было рулить вправо-влево, данный код воспринимает нажатие только одной кнопки, вторая не жмется пока первую не отпустишь
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Модуль измерения тока на ACS712 (30А)
Модуль измерения тока на ACS712 (30А)
Набор 4WD Kit Bluetooth Набор начинающего радиолюбителя
вверх