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 квітня, яка буде натискати клавіші через певні інтервали. Така річ доставить вашій цілі купу незабутніх емоцій. Тільки тсс, я цього не говорив.

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

Top