05.05.2015, 13:32 | #1 |
Новый Пользователь
Регистрация: 03.02.2010
Возраст: 43
Город: Москва
Регион: 40
Машина: Kia Rio 2004
Сообщений: 15
|
Пишу программу взаимодействия Arduino <-> Windows
Кому-то интересно кроме меня?
Преамбула Идея в реализации трех основных функций: 1. Сигналами с Arduino управлять системной громкостью Windows 2. Сигналами с Arduino эмулировать нажатия комбинаций клавиш Windows 3. Включать экран/усилитель только при загрузке Windows и отключать сразу по выходу из него. Решения для первого пункта есть, например "HotKey.exe", другие же найти не удалось. А учитывая то, что при сбое в подключении Arduino "HotKey.exe" весело сообщает о пропадании COM-порта и требует перезапуска, решено было написать что-то свое. Для системы программирования Processing существует библиотека FIRMATA. Она позволяет организовать двунаправленный интерфейс. Однако, после нескольких часов копания так и не понял, как передать с Arduino абстрактную команду. Иными словами уткнулся в то, что при таком подходе Arduino теряет возможность обрабатывать что-то в себе. Не хотелось бы. Более того, сам Processing для меня непонятен. По умолчанию программа вообще получается в виде флеша .. бррр. Таким образом, решено было писать на C#. Библиотека по типу FIRMATA нашлась - Sharpduino.... но ничего непонятно. Ну и ладно. Начал изобретать велосипед. Т.е. свой протокол обмена данными Arduino <-> Приложение. Как ни странно, но кое что получилось:
Как это можно использовать уже сейчас: Хотя идея и предполагает взаимодействие Arduino <-> Приложение, а значит специальную "прошивку" Arduino, на деле функции управления Windows должны работать лишь при "правильном" синтаксисе команды. Для удобства синтаксис был выбран нерационально не в виде HEX кодов, а текстовыми строками. Они хоть и избыточны, но "читаются" с листа. Как (у меня) работает программа:
По идее связь должна быть установлена. Остальные кнопки без соответствующей прошивки Arduino пока не нужны. Кроме, пожалуй кнопки "Свернуть". Кстати, приложение сразу появляется в трее с иконкой Мяч. Иконка пока работает приложение не скрывается - почему? Да чтобы трей не "плясал" от изменения количества иконок и было проще целиться в него пальцем. При отключении Arduino программа переходит в ждущий режим и начнет пытаться установить связь с выбранным COM-портом. Как только связь восстановится, программа самостоятельно переходит в дежурный режим. Реализованные команды из Arduino в программу: Serial.println(""); // без пустой команды иногда были ошибки Serial.print("B/V/0/E"); // отключение громкости Serial.println(""); // без пустой команды иногда были ошибки Serial.print("B/V/1/E"); // уменьшение громкости Serial.println(""); // без пустой команды иногда были ошибки Serial.print("B/V/2/E"); // увеличение громкости Отключение звука сделаю вечером - задача была скорее проверить в машине. А в настоящий момент программа в работе - реализую обучение IR командам. Как видно, синтаксис команд прост B - начало команды E - окончание команды Все внутри - параметры. Разделитель параметров "/". Остальные базовые команды реализую в ближайшее время. Кроме того, возможно задействовать системные события (переход/восстановление в/из ждущего/спящего режимов) RTT - ver 0.3.1 http://dmitrych.ru/wp-content/uploads/RTT-ver-0.3.1.zip Критика, рекомендации приветствуются! Также готов попробовать реализовать функции по Вашим заявкам У себя буду поддерживать тему независимо от востребованности общественностью: http://dmitrych.ru/vzaimodejstvie-arduino-windows/ Последний раз редактировалось nice; 06.05.2015 в 21:10. |
05.05.2015, 20:35 | #2 |
Гуру
Регистрация: 19.09.2009
Возраст: 46
Город: Мелитополь
Регион: Украина
Сообщений: 2,022
|
Боюсь что практически никому.
ЗЫ. Вообще то что лепишь делается через HID. Другими словами эмулируется клава и ненужна внешняя прога для взаимодействия (ну разве что для конфигурирования железки). Если немного видоизменить дескриптор HID устройства, то через него можно и свои команды подавать на конечное устройство. |
05.05.2015, 22:29 | #3 |
Новый Пользователь
Регистрация: 03.02.2010
Возраст: 43
Город: Москва
Регион: 40
Машина: Kia Rio 2004
Сообщений: 15
|
Ага - у меня как раз Arduino nano - она без HID
Купить micro с этим самым HID в планах. Но, учитывая практически полное перекрытие текущих потребностей данным проектом ( ), актуальность покупки резко упала. Тем более запустилось без установки библиотек .. либо они уже стояли, либо не требуется. Как говорится, будем посмотреть. Если вдруг кого заинтересует - велком. Естественно, в данной версии функционал мизерный, но постараюсь расширить. |
06.05.2015, 21:13 | #4 |
Новый Пользователь
Регистрация: 03.02.2010
Возраст: 43
Город: Москва
Регион: 40
Машина: Kia Rio 2004
Сообщений: 15
|
Обновил версию
- отключение звука Таблицы с командами - работа над добавлением эмуляции комбинаций клавиш. Пока пустышка. Лениво было инвизить |
10.05.2015, 13:19 | #5 |
Новый Пользователь
Регистрация: 03.02.2010
Возраст: 43
Город: Москва
Регион: 40
Машина: Kia Rio 2004
Сообщений: 15
|
Обновился
http://dmitrych.ru/obnovlenie-rtt-us...-versiya-0-41/ Присваивание действий по списку командам с COM-порта вида «B/I/1234/E» |
Здесь присутствуют: 2 (пользователей: 0 , гостей: 2) | |
|
|