Во время выполнения кода Keyboard.write() нельзя двигать курсором мышки.

andrey18
Offline
Зарегистрирован: 26.04.2018

Специально для симуляции клавиатуры приобрёл Ардуино-микро.

Запустил скетч, который должен симулировать нажатие на определённую клавишу каждую секунду.

Но во время "печати" этой клавиши у меня замирает курсор мышки.

Как с этим бороться?

Скетч банальный, что такой использовать нельзя:


#include "Keyboard.h"

void setup() {
  // initialize control over the keyboard:
  Keyboard.begin();
}

void loop() {
  delay(1000);
  Keyboard.write('v');
}

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

delay тута лишний. Нада по-другому.

andrey18
Offline
Зарегистрирован: 26.04.2018

Причём тут "delay"? Я своими ручками мышку двигаю, а не ардуинкой.

Только во время этого "delay" я и могу курсором двигать.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Потому что delay всегда лишний.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

andrey18, к сожалению, Вы даете совершенно недостаточно информации. Например, Вы не сообщаете, как подключили мышку к Ардуино.

И еще: Для правильной эмуляции нажатия на клавишу, необходимо передавать в компьютер не только код нажатия клавиши, но и код ее отпускания.

 

PS. Ну и, само собой, delay всегда лишний.

andrey18
Offline
Зарегистрирован: 26.04.2018

Я не подключал мышь к ардуино, я подключил мышь к компьютеру.

Это компьютер перестаёт слушаться мышки, которая подключёна к к компьютеру (а не к ардуино), когда ардуино, подключённая по USB к компьютеру в текстовом редакторе пишет "v".

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

andrey18, как можно Вам что-то посоветовать, если Вы не сообщаете существенных для понрмания ситуации вещей? Например, какой-то "компьютер" повляется только в 5-м сообщении. При это остается неизвестным:

- по какому нитерфейсу подключена Ардуино к компьютеру,

- по какому интерфейсу подключена мышь к компьютеру,

- какую Вы используете библиотеку "keyboard.h",

- как ведет себя мышь, если на обычной клавиатуре нажать и не отпускать клавишу.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

andrey18 пишет:

Я не подключал мышь к ардуино, я подключил мышь к компьютеру.

Это компьютер перестаёт слушаться мышки, которая подключёна к к компьютеру (а не к ардуино), когда ардуино, подключённая по USB к компьютеру в текстовом редакторе пишет "v".


Ну и что?
У меня был комп на котором 485 usb свисток гонял курсор мышки по экрану и при этом нажимая на кнопки мышки.
При этом на соседнем всё работало прекрасно.

andrey18
Offline
Зарегистрирован: 26.04.2018

Вот я и спрашиваю, почему у меня во время работы с Keyboard, настоящая мышка перестаёт работать?

mixail844
Offline
Зарегистрирован: 30.04.2012

"Потому что" ©

Откуда библиотека "Keyboard.h" ? как настроена ?возможно что она полностью перехватывает управление HID девайсами кампуктера

p.s. я в ардуино почти не лазию, что бы прям с головой (воу-воу палехче , с C-ным ARMщиком)

andrey18
Offline
Зарегистрирован: 26.04.2018

Не заметил Ваше сообщение.

И так, вот, ответы на Ваши вопросы:

Компьютер - ноутбук с Windows 7 с родной клавиатурой и обычной USB-мышкой.

Ардуино подключается при помощи USB-кабеля, но для компьютера он подключен через COM-порт.

В диспетчере устройств эмулируемая клавиатура видна, как обычная HID-клавиатура.

Я использую обычную Keyboard.h, которая поставляется вместе с Arduino IDE
"  Copyright (c) 2015, Arduino LLC
   Original code (pre-library): Copyright (c) 2011, Peter Barrett"
 
Если на обычной клавиатуре зажать хоть пять клавиш, курсор мышки двигается нормально.
toc
Offline
Зарегистрирован: 09.02.2013

andrey18, попробуйте так


#include "Keyboard.h"

void setup() {
  // initialize control over the keyboard:
  Keyboard.begin();
}

void loop() {
  static int step = 0;
  if (step++ % 10000 == 0)
    Keyboard.write('v');
}
toc
Offline
Зарегистрирован: 09.02.2013

обычная клавиатура не зависает, как ваша ардуина с вашей программой. delay это полная остановка.

andrey18
Offline
Зарегистрирован: 26.04.2018

toc пишет:
andrey18, попробуйте так


#include "Keyboard.h"

void setup() {
  // initialize control over the keyboard:
  Keyboard.begin();
}

void loop() {
  static int step = 0;
  if (step++ % 10000 == 0)
    Keyboard.write('v');
}

 

Курсор мышки вообще перестал двигаться.

P.S. Тут клуб delay-фобов или у Вас религия такая?

mixail844
Offline
Зарегистрирован: 30.04.2012

если попробовать так : 

#include "Keyboard.h"

void setup() {
  // initialize control over the keyboard:
  Keyboard.begin();
}

void loop() {

}

или ещё вот так : 

#include "Keyboard.h"
#include "Mouse.h"

void setup() {
  // initialize control over the keyboard:
  Keyboard.begin();
  Mouse.begin();
}

void loop() {
  
   delay(1000);
    Keyboard.write('v');
}

каков результат ? 

andrey18
Offline
Зарегистрирован: 26.04.2018

mixail844 пишет:

...вот так : 

#include "Keyboard.h"
#include "Mouse.h"

void setup() {
  // initialize control over the keyboard:
  Keyboard.begin();
  Mouse.begin();
}

void loop() {
  
   delay(1000);
    Keyboard.write('v');
}

каков результат ? 

Курсор мышки продолжает "замерзать" на секунду при выводе символов.

toc
Offline
Зарегистрирован: 09.02.2013

andrey18 пишет:

P.S. Тут клуб delay-фобов или у Вас религия такая?


я свидетель blink without delay

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

andrey18 пишет:

Не заметил Ваше сообщение.

И так, вот, ответы на Ваши вопросы:

Компьютер - ноутбук с Windows 7 с родной клавиатурой и обычной USB-мышкой.

Появляются все новые и новые подробности...

Я надеюсь, Вы догадались, что в случае с ноутбуком следует сравнивать работу мыши с клавишей, нажатой на внешней клавиатуре?

andrey18
Offline
Зарегистрирован: 26.04.2018

Конечно работает!
Судя по Вашим вопросам, Вы постоянно сталкиваетесь с людьми, которые работаю на компьютерах, которые сами и спаяли. Выражаю своё уважение. В следующий раз, чтобы не нарушать чистоту эксперимента, я даже одежду менять не буду.

P.S. А вы голую голову голубя ели?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

andrey18 пишет:

 А вы голую голову голубя ели?

Хватит LSD подключать!

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

andrey18 пишет:

Не заметил Ваше сообщение.

И так, вот, ответы на Ваши вопросы:

Компьютер - ноутбук с Windows 7 с родной клавиатурой и обычной USB-мышкой.

Ардуино подключается при помощи USB-кабеля, но для компьютера он подключен через COM-порт.

В диспетчере устройств эмулируемая клавиатура видна, как обычная HID-клавиатура.

Я использую обычную Keyboard.h, которая поставляется вместе с Arduino IDE
"  Copyright (c) 2015, Arduino LLC
   Original code (pre-library): Copyright (c) 2011, Peter Barrett"
 
Если на обычной клавиатуре зажать хоть пять клавиш, курсор мышки двигается нормально.

По симптомам - проблема не в ардуинке, а в дровах. ИМХО - туда надо копать.