Mouse.move()
Описание
Перемещает курсор на подключённом компьютере. Перемещение на экране всегда задаётся относительно текущего положения курсора. Перед использованием Mouse.move() необходимо вызвать Mouse.begin().
Синтаксис
Mouse.move(xVal, yVal, wheel)
Параметры
xVal: величина перемещения по оси X. Допустимые типы данных:signed char.yVal: величина перемещения по оси Y. Допустимые типы данных:signed char.wheel: величина прокрутки колеса. Допустимые типы данных:signed char.
Возвращаемое значение
Ничего.
Пример кода
#include <Mouse.h>
const int xAxis = A1; //аналоговый датчик для оси X
const int yAxis = A2; // аналоговый датчик для оси Y
int range = 12; // диапазон выходного перемещения по X или Y
int responseDelay = 2; // задержка реакции мыши, мс
int threshold = range / 4; // порог покоя
int center = range / 2; // значение положения покоя
int minima[] = {1023, 1023}; // фактические минимумы analogRead для {x, y}
int maxima[] = {0, 0}; // фактические максимумы analogRead для {x, y}
int axis[] = {xAxis, yAxis}; // номера пинов для {x, y}
int mouseReading[2]; // итоговые показания мыши для {x, y}
void setup() {
Mouse.begin();
}
void loop() {
// считать и масштабировать две оси:
int xReading = readAxis(0);
int yReading = readAxis(1);
// переместить мышь:
Mouse.move(xReading, yReading, 0);
delay(responseDelay);
}
/*
считывает ось (0 или 1 для x или y) и масштабирует
диапазон аналогового входа в диапазон от 0 до <range>
*/
int readAxis(int axisNumber) {
int distance = 0; // расстояние от центра выходного диапазона
// считываем аналоговый вход:
int reading = analogRead(axis[axisNumber]);
// если текущее показание превышает максимум или минимум для этой оси,
// переустанавливаем максимум или минимум:
if (reading < minima[axisNumber]) {
minima[axisNumber] = reading;
}
if (reading > maxima[axisNumber]) {
maxima[axisNumber] = reading;
}
// отображаем показание из диапазона аналогового входа в выходной диапазон:
reading = map(reading, minima[axisNumber], maxima[axisNumber], 0, range);
// если выходное показание выходит за пределы
// порога положения покоя, используем его:
if (abs(reading - center) > threshold) {
distance = (reading - center);
}
// ось Y нужно инвертировать, чтобы
// правильно отобразить движение:
if (axisNumber == 1) {
distance = -distance;
}
// вернуть расстояние для этой оси:
return distance;
}
Примечания и предупреждения
Предупреждение
Когда вы используете команду Mouse.move(), плата Arduino перехватывает управление вашей мышью! Убедитесь, что вы можете сохранить контроль, прежде чем использовать эту команду. Эффективное решение — добавить кнопку для переключения состояния управления мышью.