nice
05.05.2015, 13:32
Кому-то интересно кроме меня?
Преамбула
Идея в реализации трех основных функций:
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 могут эмулироваться нажатия клавиш и екоторые их комбинации (вторая основная цель)
По команде из Приложения меняется состояние цифровых и аналоговых выводов Arduino. А это значит, что при использовании Реле будет решена третья основная цель.
Как это можно использовать уже сейчас:
Хотя идея и предполагает взаимодействие Arduino <-> Приложение, а значит специальную "прошивку" Arduino, на деле функции управления Windows должны работать лишь при "правильном" синтаксисе команды.
Для удобства синтаксис был выбран нерационально не в виде HEX кодов, а текстовыми строками. Они хоть и избыточны, но "читаются" с листа.
Как (у меня) работает программа:
В Arduino можно загрузить любой скетч, главное, чтобы скорость соединения была 115200.
снимаем галочку "по умолчанию" и жмем кнопку "поиск портов" (особенно, если Arduino подключили после запуска программы)
выбираем порт с нужной нам платой Arduino. Если порт не предполагается менять - ставим галку "по умолчанию", чтобы программа впредь сразу к нему пыталась подключаться.
По идее связь должна быть установлена.
Остальные кнопки без соответствующей прошивки 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
Критика, рекомендации приветствуются!
Также готов попробовать реализовать функции по Вашим заявкам :smile1:
У себя буду поддерживать тему независимо от востребованности общественностью:
http://dmitrych.ru/vzaimodejstvie-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 могут эмулироваться нажатия клавиш и екоторые их комбинации (вторая основная цель)
По команде из Приложения меняется состояние цифровых и аналоговых выводов Arduino. А это значит, что при использовании Реле будет решена третья основная цель.
Как это можно использовать уже сейчас:
Хотя идея и предполагает взаимодействие Arduino <-> Приложение, а значит специальную "прошивку" Arduino, на деле функции управления Windows должны работать лишь при "правильном" синтаксисе команды.
Для удобства синтаксис был выбран нерационально не в виде HEX кодов, а текстовыми строками. Они хоть и избыточны, но "читаются" с листа.
Как (у меня) работает программа:
В Arduino можно загрузить любой скетч, главное, чтобы скорость соединения была 115200.
снимаем галочку "по умолчанию" и жмем кнопку "поиск портов" (особенно, если Arduino подключили после запуска программы)
выбираем порт с нужной нам платой Arduino. Если порт не предполагается менять - ставим галку "по умолчанию", чтобы программа впредь сразу к нему пыталась подключаться.
По идее связь должна быть установлена.
Остальные кнопки без соответствующей прошивки 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
Критика, рекомендации приветствуются!
Также готов попробовать реализовать функции по Вашим заявкам :smile1:
У себя буду поддерживать тему независимо от востребованности общественностью:
http://dmitrych.ru/vzaimodejstvie-arduino-windows/