Pull to refresh

Comments 21

НЯП, под тиньки была библиотека, позволяющая превратить микроконтроллер в USB-устройство. Можно "свободного назначения" - и обмениваться какими угодно данными с программой, а можно и прикинуться предопределенным устройством.
Как раз в Вашем случае предпочтительно прикинуться клавиатурой, и по нажатию хардверных кнопок слать в шину серию нажатий уже виртуальных кнопок, составляющих той или иной текст. Так устройство становится переносимым и не будет требовать софт для системы, соответственно, можно кодить уже хоть где.

Вроде, она не только под тини, а вообще под любые АВРы. То есть даже мега из ардуины справится. Но это не arduino-way подход.

Насколько я понял, вы сделали не клавиатуру, а набор кнопок, которые нестандартным способом соединяются с компьютером через COM-порт, после чего нестандартная программа имитирует нажатие клавиш.
А собственно зачем? Есть же vusb, благодаря которой AVR'ку можно напрямую подключить в USB в качестве клавиатуры, без всяких костылей.

Этот способ нестандартный для тех, кто хорошо разбирается в Arduino и программировании микроконтроллеров. Но я не говорю, что я специалист, я просто реализовал свою идею так, как я это мог сделать. Так как мне показалось это интересным, я об этом рассказал.

Этот способ нестандартный для любого пользователя ПК. Когда человек подключает клавиатуру, он не ожидает, что придется еще и "драйвер" непонятно откуда скачивать. С весьма нехилым шансом, что он вообще не заведется на его старой / новой машине.


Что бы я посоветовал вам сделать в качестве развития этого проекта и что, полагаю, было бы более интересно читателям — собственно настраиваемая клавиатура. Разберитесь как запустить тот же vusb (а если захотите не просто запустить, но и разобраться в подробностях его работы, у меня есть статья по внутреннему устройству) и сделайте, чтобы последовательности символов, отправляемые по нажатию кнопки, можно было программировать через тот же COM-порт в терминальном режиме. Например, подключаетесь через родной ардуинский порт и в терминале вводите "1while(1){\n\n}\u ", а ардуинка запоминает, что при нажатии на первую клавишу надо послать коды кнопок 'w', 'h', 'i', 'l', 'e', '(', '1', ')', '{', два энтера, '}', кнопку вверх и два пробела. Такая реализация гораздо удобнее вашей, поскольку не требует дополнительного софта: при нормальной работе это обычная клавиатура, при настройке — обычный COM-порт. Ни то, ни другое не требуют от пользователя установки посторонних программ.


Вообще-то, еще удобнее была бы реализация составного устройства клавиатура + флешка, тогда настройки можно сделать обычными текстовыми файлами. Но средствами вашей Ардуинки это невозможно: vusb это low-speed устройство, а им стандартом запрещено работать в роли флешек, переходников на COM-порты, микрофонами и тому подобным. Да и знаний понадобится не в пример больше.


Вариант второй — реализовать что-то необычное. Скажем, не просто клавиатура, а запуск программ (хотя это тоже прекрасно решается через хоткеи), или, скажем, убийство зависшей программы, или сворачивание всех окон, кроме окна с рабочим проектом.

Спасибо за идеи, почитаю об этом. В версии программы, которую я писал для себя, запускалась Камера на Windows, правда, через костыль: нажималась кнопка Win, вводилось слово Camera, нажимался Enter.
Arduino Leonardo и пример "из коробки"

Arduino Leonardo — контроллер на базе ATmega32u4

У автора контроллер все же попроще и без аппаратного USB. Даже для обычного vusb придется допаивать обвязку — разъем, три резистора и два стабилитрона.

Lonardo может чуть и подороже (хотя с 32U4 есть очень недорогие платы), зато экономит кучу времени (дорогого?) на разработку кода под ОС, не требует никакой установки и гораздо надежнее благодаря этому.

Я не говорю уже о том что аппаратное решение изящнее с архитектурной точки зрения.

Ну а вот у автора оказалась только обычная, на m328 — ее выбрасывать что ли?
Цена времени в любительских проектах чаще всего оказывается отрицательной, ведь делается это не ради получения прибыли, а ради опыта.
"на разработку кода под ОС" — так vusb тоже просто подключается и работает, как обычная клавиатура. Плюс запускается в том числе на m328. Пять с половиной навесных компонентов это вообще не проблема, речь ведь не о какой-то экзотике.

К сожалению, у меня нет Arduino Leonardo. Для Arduino Uno я сделал это так, как у меня получилось.

Автор, Вы получили символы из порта, они уже лежат в Вашей переменной и Вы не можете сами на них посмотреть, а пишете "Если кто-то знает, какой там символ на самом деле, буду рад узнать. Пишите в комментарии." ???

Этот символ не отображался в консоли, а анализировать через ord() мне не хотелось. Так как мне было не важно какой это символ, мне было важно его просто удалить, то я не разобрался в этом. Но этот проект оказался мне интересным, и я захотел о нем рассказать, так как давно собирался сделать что-то подобное.

анализировать через ord()

Целую научно-исследовательскую работу проводить собрались?

какой там символ на самом деле

В хелпе Ардуино:

Serial.println()

Description

Prints data to the serial port as human-readable ASCII text followed by a carriage return character (ASCII 13, or '\r') and a newline character (ASCII 10, or '\n'). This command takes the same forms as Serial.print().

Спасибо! Не догадался посмотреть там. Я не профессионал в Arduino и я знаю Arduino и его особенности хуже, чем некоторых других языков.

Arduino — это не язык. CRLF — это не особенность. Смотреть надо не там, а попросту знать, чем отличается print от println, не важно где.

По ошибке плюсанул, извините.
Миллисы — тоже забавные...

Видел как-то программу специальную, которая символы из com порта в имитацию клавиатуры превращает, ну или вот, к примеру, полу коммерческая https://www.232key.com/

По запросу rs-232 to keyboard - десятки вариантов.

Есть недорогой контроллер Pro Micro, аналог Arduino Leonardo, в Arduino IDE есть библиотеки Keyboard и Keypad, с помощью которых можно сделать USB клавиатуру из большого количества кнопок, подключив их матрицей, а чтобы не было фантомных нажатий кнопок, можно к каждой кнопке последовательно подключить диод.

Sign up to leave a comment.

Articles