Mouse.move()

Описание

Перемещает указатель мыши на подсоединенном компьютере. Перемещения по экрану всегда задаются относительно текущего положения указателя. Перед использованием Mouse.move() необходимо вызвать метод Mouse.begin().

ВНИМАНИЕ: при использовании команды Mouse.move() Ардуино берет управление вашей мышью на себя! Поэтому, перед использованием этой команды убедитесь, что у вас есть возможность отключить Ардуино от управления мышью. С этой целью рекомендуется использовать какую-либо кнопку, позволяющую включать или выключать данную функцию.

Синтаксис

Mouse.move(xVal, yVal, wheel)

Параметры

xVal: величина, на которую следует переместить указатель вдоль оси x - signed char

yVal: величина, на которую следует переместить указатель вдоль оси y - signed char

wheel: величина смещения колеса прокрутки - signed char

Возвращаемые значения

нет

Пример

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 для x, 1 для y) 
  и преобразовывает считанное значение из входного диапазона в диапазон перемещений 
*/

int readAxis(int axisNumber) {
  int distance = 0;    // величина перемещения от центра диапазона

  // считываем значение с аналогового входа:
  int reading = analogRead(axis[axisNumber]);

  // если текущее считанное значение превышает значения max или min данной оси,
  // то переприсваиваем max или min:
  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;
}

Смотрите также