- PVSM.RU - https://www.pvsm.ru -
В этом посте пойдёт речь о широко известной в узких кругах педали для переключения Vim из Normal mode в Insert mode и обратно. Вдохновившись примерами подобных поделок на просторах сети, я решил сделать свой вариант, с преферансом и поэтессами.
Сделать педаль, представляющую собой USB HID-устройство, при нажатии и удержании которой печатается i
, а при отпускании Esc
.
Заказать китайскую педаль PCsensor USB footswitch [1] и запрограммировать её соответствующим образом.
В теории всё кажется очень простым. Я заказал одну обычную USB-педаль, одну тройную педаль и одну механическую педаль с кнопкой без контроллера. Как только я получил посылку с педалями — сразу же столкнулся с суровой реальностью. Я не учёл того, что педаль PCsensor может работать только как одна клавиша. Это годится только для очень примитивных решений. Для нашей задачи необходимо наличие как минимум двух клавиш, причём, срабатывающих от разных событий. Это уже не говоря о том, что софт для программирования педалей доступен только под Windows. Под Mac и Linux педаль практически бесполезна, если вы не способны написать драйвер для конфигурирования этого устройства самостоятельно.
Александр Левчук, разработкой [2] которого я вдохновился, использовал грубый хак — он взял два оптических датчика от двух педалей и засунул их в один корпус. Один датчик срабатывает при нажатии и запрограммирован на i
, а другой запрограммирован на генерацию Esc
при отпускании. А поскольку каждый датчик — это самостоятельный USB HID-контроллер — его устройство занимает сразу два USB-порта компьютера! Плюсов от такого решения немного — для получения одной Vim-педали потребуется две обычных педали PCsensor, зато не нужно городить свой собственный контроллер.
Теперь, когда проблема изучена, можно приступить к решению. Итак: одна педаль, один датчик, один USB-провод и один контроллер, умеющий прикидываться USB HID-устройством. Искать даже ничего не пришлось. Я давно увлекаюсь Arduino и микроконтроллерами. В линейке плат Arduino есть версии Leonardo [3] на базе ATmega32u4 и Due [4] на базе ARM-чипа Atmel SAM3X8E Cortex-M3, которые умеют работать как периферийное USB-устройство. Однако, обе платы слишком большие и их функции явно избыточны для нашей простой задачи. Начал искать микро-версии этих же плат.
Уже не помню какими путями наткнулся на решение DF Robot Beetle [5] и его китайский клон на dx.com [6]. Цена вопроса — около 10 долларов. Было решено заказать сразу три штуки.
Как видно на фото, контроллер имеет очень маленький размер, уменьшенное (по сравнению с Arduino) число контактов и никаких лишних выступающих элементов. При этом он обладает совместимостью с Arduino на программном уровне. Таким образом, я не только избавился от избыточности классической Arduino-платформы в пользу необходимой и достаточной компактности, но добавил новые фичи, свойственные этой платформе.
Всё! Осталось подсоединить к контроллеру оптические датчики педали, написать прошивку и аккуратно собрать устройство в корпус. Я просто подпаял уже существующий оптический сенсор педали к одному из входов Arduino (в данном случае D9). Нашёл на плате педали + и -, соединил их с Arduino и вывел сигнал от фотодиода на цифровой вход. На всякий случай отрезал заводскую микросхему-каплю на плате педали, чтобы не даваля ложных сигналов.
К сожалению, я не буду расписывать здесь на множество экранов, какой проводочек куда подпаять, потому что это рискует закончиться тем, что мне придётся рассказывать, как включить паяльник и где купить олово. Для людей, умеющих пользоваться паяльником, всё довольно просто и очевидно.
Принцип работы прошивки до неприличя простой. Проверяется наличие сигналов на 9 выводе контроллера (переменная buttonState
). Если сигнал меняется с 0 на 1 — педаль нажата, посылаем Esc, i
. Если сигнал меняется с 1 на 0 — педаль отпущена, посылаем Esc
. Наверное, не нужно объяснять, что перед i
я тоже посылаю Esc
для выхода из уже включенного режима Insert.
Стоит перечислить неочевидные особенности моего решения:
В комментариях принимаются идеи по дальнейшему развитию проекта. Спасибо за внимание!
Автор: foxweb
Источник [17]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/diy/66864
Ссылки в тексте:
[1] PCsensor USB footswitch: http://pcsensor.com/index.php?_a=category&cat_id=41
[2] разработкой: https://github.com/alevchuk/vim-clutch
[3] Leonardo: http://arduino.cc/en/Main/arduinoBoardLeonardo
[4] Due: http://arduino.cc/en/Main/arduinoBoardDue
[5] DF Robot Beetle: http://www.dfrobot.com/index.php?route=product/product&product_id=1075
[6] dx.com: http://www.dx.com/p/jtron-mini-controller-module-black-works-with-official-arduino-board-326521
[7] USB Foot Switch: http://pcsensor.com/index.php?_a=product&product_id=150
[8] Arduino IDE: http://arduino.cc/en/main/software
[9] Исходный код: https://github.com/foxweb/vim-pedal/tree/master/sources
[10] Mouse and keyboard: http://arduino.cc/en/Reference/MouseKeyboard
[11] доступен: https://github.com/foxweb/vim-pedal/blob/master/sources/vimpedal.ino
[12] мигающий светодиод Arduino: https://www.google.ru/search?q=мигающий+светодиод+Arduino&oq=мигающий+светодиод+Arduino
[13] Bluefruit EZ-key: https://www.adafruit.com/products/1535
[14] USB Foot Switch: http://pcsensor.com/index.php?_a=product&product_id=150
[15] DF Robot Beetle.: http://www.dfrobot.com/index.php?route=product/product&product_id=1075
[16] GitHub-репозиторий: https://github.com/foxweb/vim-pedal
[17] Источник: http://habrahabr.ru/post/232177/
Нажмите здесь для печати.