C# Arduino: как определить, установлено ли на компьютере необходимое программное обеспечение
У меня есть digispark, который использует библиотеку клавиатуры trinket для отправки клавиш мультимедиа обратно на компьютер с помощью поворотного энкодера. В настоящее время он настроен на отправку обычных клавиш мультимедиа, но около 2 недель назад мне потребовалось изменить привязки к тому, что делает поворотный энкодер, поэтому мне понадобился какой-то драйвер. Я спросил и получил ответы, что я не могу использовать последовательные порты, но я могу использовать неиспользуемые клавиши, такие как клавиши f13+, поэтому теперь я использую клавиши f для связи с программным обеспечением c# (оно слушает эти клавиши f и, как только они нажимаются, в зависимости от конфигурации, делает то, что ему нужно).
Я не думаю, что этот код нужен для этой демонстрации, но если он вам нужен, я с радостью его отредактирую.
Итак, я создал программное обеспечение, и теперь возникла проблема: что происходит, когда вы подключаете устройство, для которого нет драйвера? Это бесполезно, поэтому мне нужен способ, с помощью которого digispark сможет узнать, есть ли программное обеспечение, которое может «перепрограммировать» работу поворотного энкодера, и если нет, использовать функции по умолчанию (клавиши мультимедиа).
Вопросы:
Как мне узнать, есть ли необходимый драйвер на том компьютере, к которому подключен digispark?
Есть ли способ добавить мою программу, написанную на C#, в digispark? У меня есть USB-гарнитура, и когда я впервые ее подключил, она установила свой драйвер. Когда я подключаю свой digispark, он может загрузить программу?
Решения, которые, по моему мнению, могут сработать, но я понятия не имею, как их реализовать:
используя одну из этих неиспользуемых клавиш в качестве логического значения, когда она удерживается, скажем, программным обеспечением C#, может ли digispark с помощью брелка или любой другой совместимой библиотеки Tiny85 определить, нажата ли эта клавиша или нет (это может помешать работе другого программного обеспечения, поэтому я не думаю, что это идеальное решение)
Если кто-нибудь знает какую-либо библиотеку или пользовательскую прошивку, которая позволяет digispark (Tiny85) взаимодействовать через последовательные порты, это было бы весьма полезно и решило бы весь вопрос.
По второй проблеме: нужно ли мне какое-либо другое оборудование, чтобы сделать это, поскольку у меня есть только Tiny85 digispark и поворотный энкодер с коммутационной платой
Если у вас есть решение, пожалуйста, предоставьте мне код или ссылки, по которым я могу узнать, как это сделать, потому что на данный момент я понятия не имею, как это сделать, я знаю, как это сделать, но я новичок в программировании Arduino. Я уже спрашивал об этом на Stack Overflow неделю назад, но не получил никаких комментариев или ответов. Извините, если это считается дубликатом, я удалю тот, что на Stack Overflow, если нужно. Спасибо за понимание
@SenaCarbtc, 👍0
Обсуждение1 ответ
Как мне узнать, есть ли необходимый драйвер на том компьютере, к которому подключен digispark?
Я не могу придумать, как это сделать. Это все равно, что спрашивать, может ли клавиатура, подключаемая к USB-порту, определить, установлен ли у вас Photoshop или нет.
Есть ли способ добавить мою программу, написанную на C#, в digispark ...
Нет. Digispark — это крошечный компьютер на базе Attiny85, имеющий 8 КБ памяти программ, часть которой выделена для загрузчика, позволяющего загружать новый код.
Ваш проект слишком амбициозен для того уровня оборудования, которое вы предлагаете использовать. На самом деле, это видео, которое я посмотрел на днях, приходит мне на ум:
https://www.youtube.com/watch?v=s7AXskSxxMk
Из комментария:
it относится к digispark, при подключении digispark проверяет, нажата ли клавиша f17, и если это так, это означает, что моя программа работает в фоновом режиме, поэтому используйте функции, совместимые с программой
Хорошо, вы хотите, чтобы хост-компьютер (не Digispark) делал вид, что удерживает F17, а затем, когда Digispark подключен, он проверяет, нажата ли F17, и если да, то он знает, что нужная программа запущена на ПК. Это ваша идея?
Проблема здесь в том, что Digispark — это USB-устройство (а не USB-хост). Я полагаю, что можно было бы написать специальный драйвер устройства на ПК, который после подключения Digispark отправлял бы специальный код, сообщающий, запущена ли программа. Однако, поскольку Digispark имеет всего 8 КБ памяти программ, этот дополнительный код (на Digispark) может быть трудно вместить. Плюс вам нужно будет написать свой драйвер USB-устройства. Плюс драйвер устройства должен иметь возможность запрашивать, какие программы запущены.
Я думаю, гораздо более простым решением было бы иметь кнопку Вкл/Выкл на Digispark. Если вы подключаете его к ПК, на котором запущена эта специальная программа, вы нажимаете кнопку, и Digispark отправляет альтернативные команды вашей программе на C#.
Во-первых, я четко указал, что у digispark нет последовательного порта, поэтому я использую одну из неиспользуемых клавиш, скажем, f17, как логическое значение. Моя программа на C# удерживает ее, поэтому при подключении digispark она должна проверять, нажата ли f17, если нет, то по умолчанию должна использоваться регулировка громкости, а если она нажата, то должны использоваться f13 и f14 для вращения поворотного энкодера (это уже сделано). Мне нужен способ определить, нажата ли эта клавиша, и действовать в соответствии с этим. Во-вторых, у digispark нет внутренней памяти, поэтому я и спросил, что мне купить, чтобы получить эту функциональность., @SenaCarbtc
@SenaCarbtc USB-устройство не имеет абсолютно никакого способа запросить, какое программное обеспечение установлено на вашем компьютере, независимо от того, какое устройство вы покупаете. Это просто физически невозможно. Только программное обеспечение, установленное на вашем компьютере, может знать, какое программное обеспечение установлено на вашем компьютере., @Majenko
@SenaCarbtc Единственное, что вы могли бы сделать, это отправить какое-то пользовательское сообщение с USB-устройства, на которое реагирует программное обеспечение, отправляя сообщение обратно. Если это сообщение так и не приходит, вы можете предположить, что программное обеспечение либо не установлено, либо не запущено., @Majenko
Я не упомянул "последовательный" в своем ответе. Теперь я не уверен, имеете ли вы в виду под Digispark устройство, которое вы подключаете к компьютеру, или какое-то программное обеспечение, работающее на компьютере (например, IDE). когда digispark подключается, он должен проверить, нажата ли f17 или нет
- что означает "это" в этом предложении?, @Nick Gammon
@NickGammon это относится к digispark, при подключении digispark проверяет, нажата ли клавиша f17, и если это так, это означает, что моя программа работает в фоновом режиме, поэтому используйте функции, совместимые с программой, я уже получил ответ об использовании клавиши Scroll Lock, но можно ли это сделать с помощью f17, поскольку ни одна программа ее не использует?, @SenaCarbtc
См. измененный ответ., @Nick Gammon
- Связь последовательного порта Digispark
- Библиотеки I2C для ATTiny85?
- Можно ли подключить экран SD-карты к плате Digispark ATtiny85?
- Почему DigiSpark не распознается автоматически на других компьютерах?
- Изменить тактовую частоту Digispark, работать при низком напряжении
- Digispark ATtiny 85 - не распознается как HID устройство
- ATtiny85 (Digispark) с радиочастотным передатчиком 433 МГц не работает
- Открытие программы в administrator с помощью Arduino (DigiSpark / DigiSparkKeyboard)
USB-устройство не может проверить, нажата ли клавиша. Вы могли бы проверить статус клавиши Capslock. Поэтому мое предлагаемое решение было бы таким. При включении питания пусть digispark отправит нажатие клавиши F17. Затем пусть C# ответит включением Capslock по Turing, например, на 1 секунду. Digispark проверит, была ли нажата клавиша Capslock в течение короткого момента, и если да, то узнает, что программа C# активна. (Обратите внимание, что вам нужно немного другое решение, если digispark уже подключен до включения ПК), @Gerben
@Gerben Можно ли это сделать с помощью Scrool Lock, так как я не часто им пользуюсь, а проблему, когда ваш ПК не загружается, можно решить, добавив задержку при запуске, например, 20 секунд, чтобы дать ПК и программе возможность запуститься, или поместить его в цикл и добавить логическое значение, чтобы прекратить проверку при каждом цикле, если он находит программное обеспечение?, @SenaCarbtc
scrolllock действительно был бы лучше., @Gerben
Каков размер вашего установочного пакета программного обеспечения?, @Majenko
И почему вы так зациклились на таком неподходящем микроконтроллере для сложной работы USB?, @Majenko
Вы используете слишком много слов, чтобы задать вопрос об эмуляции USB-клавиатуры с помощью digispark.... поворотный энкодер на самом деле не имеет отношения к вашему вопросу... откройте другой вопрос для поворотного энкодера, если нужно... упростите текст вопроса, и вы, возможно, получите ответ от большего количества людей, @jsotola
@jsotola некоторым людям может понадобиться объяснение того, какие ключи отправляются и принимаются программой, @SenaCarbtc
неважно, для чего нажимаются клавиши... принимающая программа также неважна... вопрос в том, как создать клавиатуру... вы упускаете из виду то, с чем на самом деле у вас возникла проблема, @jsotola