До сих пор мы работали только с 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 апреля, которая будет нажимать клавиши через определенные интервалы. Такая штучка доставит вашей цели кучу незабываемых эмоций. Только тсс, я этого не говорил.
Прикрепленные файлы:
- Guitar.rar (2 Кб)
Комментарии (10)
|
Я собрал (0) |
Подписаться
Для добавления Вашей сборки необходима регистрация
[Автор]
http://cxem.net/comp/comp191.php
Например: Нажал и удерживаю кнопку ушла команда Keyboard.press('n'), когда отпустил ушла другая Keyboard.press('a').