До сих пор мы работали лишь с 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 апреля, которая будет нажимать клавиши через определенные интервалы. Такая штучка доставит вашей цели кучу незабываемых эмоций. Только тсс, я этого не говорил.
Прикрепленные файлы:
- Guitar.rar (2 Кб)