Как переместить более 128 пикселей при использовании Mouse.move Arduino Leonardo?

mouse

Как переместиться более чем на 128 пикселей при использовании Mouse.move Arduino Leonardo? Можно ли изменить заголовочный файл или использовать другую библиотеку? Я использовал библиотеку MouseTo, но это был не тот ход, который мне нужен. Мы хотим максимально быстро двигаться в относительных координатах, а не на один пиксель. Я искал почти все сообщества, но я не. Помогите им.

, 👍1


2 ответа


0

Для значений X и Y между -64 и 64 рассмотрите возможность умножения значений X и Y, которые вы передаете методу mouse.move() на 2. На приведенной выше странице пример вызова mouse.move() выглядит следующим образом:

mouse.move(xVal, yVal, колесо)

Для двукратного изменения в любом направлении можно написать так:

mouse.move((2 * xVal), (2 * yVal), колесо)

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

Более сложный подход: вы также можете рассмотреть возможность перезаписи или добавления драйвера мыши Arduino. Похоже, что драйвер мыши Arduino находится здесь. Поскольку это С++, вам нужно будет изменить определение метода «мышь», а также то, как вы обрабатываете переменные типа int, а не переменные размера char. В этом случае вы можете воспользоваться функцией перегрузки методов C++. То есть у вас может быть 2 одноименных метода с разными типами параметров. C++ будет рассматривать их как два отдельных метода. Таким образом, оригинальный метод mouse.move может остаться нетронутым. В то время как новый метод mouse.move сможет обрабатывать значения типа singed int вместо значений типа singed char.

,

Не приведет ли подход умножения к переполнению параметров? Объяснение после этого кажется мне лучше: вызов метода несколько раз или изменение библиотеки., @chrisl

что? беззнаковые символы (от -127 до 127) определяются в событии HID. как бы вы это переопределили?, @Juraj

Я понимаю. Ваш ответ был для меня полезен, даже если это было невозможно., @bdconfig

@juraj, если определение HID ограничивает движение мыши, библиотека может абстрагировать это от эскиза Arduino, отправив несколько команд HID, если значение, переданное в библиотеку, будет больше, чем разрешено интерфейсом HID. Таким образом, вызов библиотеки с использованием целых чисел вместо символов все равно может быть создан., @st2000

@chrisl, да, я перефразирую ответ., @st2000


2

Протокол USB HID для мыши — это ограничение на отправку значения размером более байта для движения мыши за один раз. событие.

Вы не можете создать более быструю USB-мышь. Повторите вызов функции move(). Конечно, вы можете использовать функцию для многократного вызова функции move() для перемещения к целевому пункту назначения.

void mouseMove(long x, long y) {
  long max = max(abs(x), abs(y));
  int count = (int) (max / 127);
  signed char stepX = x / (count + 1);
  signed char stepY = y / (count + 1);
  for (int i = 0; i < count; i++) {
    Mouse.move(stepX, stepY);
  }
  signed char resX = x - (stepX * count);
  signed char resY = y - (stepY * count);
  if (resX != 0 || resY != 0) {
    Mouse.move(resX, resY);
  }
}
,

Были случаи, когда точное значение не было доступно, когда я звонил несколько раз. В любом случае, спасибо за ваш ответ., @bdconfig