Digispark: проверьте, подключен ли USB-хост
Я пытаюсь определить, действительно ли устройство digispark подключено к хосту (т. е. линия USB «активна»), а не только что включена.
Проблема: если я отправляю нажатие клавиши при отключенной линии данных, код постоянно зависает в sendKeyPress
.
Моя теория состоит в том, что он продолжает зацикливаться, ожидая готовности USB, и это имеет смысл.
while (!usbInterruptIsReady()) {
// Примечание: мы ждем, пока не сможем отправить keyPress
// так мы знаем, что предыдущее нажатие клавиши было
// отправил.
usbPoll();
_delay_ms(5);
}
Я пытался использовать макрос usbInterruptIsReady()
перед вызовом sendKeyStroke
в main
, но безуспешно. Я ожидал увидеть функцию, которая отслеживает это состояние, но, видимо, ее нет.
Кроме того: то, чего я пытаюсь добиться, не кажется чем-то очень странным, поэтому я ожидаю, что кто-то другой мог наткнуться на это и найти разумный обходной путь. Я бы не хотел настраивать сторожевой таймер.
Пример приведенного ниже кода зависает, когда устройство включено, но не подключено к ПК. Спасибо
Справочная информация: https://hackaday.io/project/191762-automatic-workstation-locker
#include "DigiKeyboard.h"
#include "Arduino.h"
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
DigiKeyboard.update();
DigiKeyboard.sendKeyStroke(0);
}
void loop() {
static uint8_t bit = 0;
bit = 1 - bit;
digitalWrite(LED_BUILTIN, bit);
DigiKeyboard.update();
DigiKeyboard.sendKeyStroke(KEY_Q);
delay(2000);
}
@Paperino, 👍-1
Обсуждение1 ответ
Digispark не имеет надлежащей аппаратной реализации USB. Вполне возможно, что вы просто не можете сделать то, что пытаетесь сделать. Поиск, который я провел, показал, что вы не единственный, кто пытается это сделать.
Возможно, вы захотите переключиться на одну из плат Arduino с аппаратным интерфейсом USB, например Leonardo или Micro.
Я должен отметить, что Digispark не является Arduino, и у него есть собственный форум, где вы можете получить ответ свое собственное сообщество.
- Связь последовательного порта Digispark
- Библиотеки I2C для ATTiny85?
- Можно ли подключить экран SD-карты к плате Digispark ATtiny85?
- Почему DigiSpark не распознается автоматически на других компьютерах?
- Digispark ATtiny 85 - не распознается как HID устройство
- Открытие программы в administrator с помощью Arduino (DigiSpark / DigiSparkKeyboard)
- Клавиатура Digispark ATtiny85
- Почему DigiKeyboard.print и println меняют строку?
Я удалил все комментарии, дошедшие до санок. Помните, что комментарии под вопросом предназначены для его разъяснения, а не для нападок друг на друга., @Nick Gammon
Если вы хотите пожаловаться на работу этого сайта, поднимите проблему на [нашем мета-сайте](https://arduino.meta.stackexchange.com/)., @Nick Gammon
Мне вопрос кажется разумным, однако @Paperino, вам не следует повторять один и тот же вопрос. Постарайтесь сохранить оригинал, где это возможно. Поскольку сейчас он удален, я предлагаю воспользоваться этим., @Nick Gammon