Arduino:Примеры/EsploraJoystickMouse

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Управление курсором мыши при помощи джойстика Esplora[1]

Этот пример демонстрирует, как считывать информацию с джойстика Esplora, используя ее для управления передвижением курсора на компьютере. Вы сделаете свою Esplora мышкой!

Данный скетч заберет управление мышкой и передаст его Esplora. В случае потери контроля над курсором проделайте следующее:

  • отключите Esplora;
  • откройте скетч «Перемигивание цветами на Esplora» (EsploraBlink) в IDE Arduino;
  • снова подключите Esplora к компьютеру, попутно зажав у нее кнопку Reset;
  • продолжая нажимать на Reset, кликните по кнопке Upload в IDE Arduino;
  • увидев в IDE Arduino сообщение «Done Compiling», отпустите Reset;

То есть, вы загрузите скетч, не управляющий курсором мыши, благодаря чему Esplora перестанет управлять курсором вашего компьютера.

Необходимое оборудование

  • Плата Arduino Esplora;

Цепь

Для этого примера нужна лишь Arduino Esplora, через USB-кабель подключенная к компьютеру, а также открытый Serial Monitor.

Расположение джойстика на Esplora

Расположение джойстика на Esplora

Код

Чтобы отсылать данные на компьютер, вам нужно запустить последовательную передачу данных. Сделаем это при помощи функции Serial.begin(), а скорость соединения установим в 9600 бод.

Теперь, чтобы начать коммуникацию с курсором, вызываем функцию Mouse.begin(). С этого момента Esplora начнет выступать в роли мышки.

Чтобы считывать позицию джойстика, вызываем функции Esplora.readJoystickX() и Esplora.readJoystickY(), а возвращенные ими значения будем сохранять в специально созданных для этого переменных. От каждой оси будут поступать значения в диапазоне от «-512» до «512». Когда джойстик будет находиться по центру, оси X и Y будут давать значение «0».

Кроме того, джойстик, если на него нажать, будет действовать как кнопка. Чтобы считывать это действие, вызовем функцию Esplora.readJoystickSwitch(). Она вернет значение «1», если на джойстик нажать, и «0», если кнопка джойстика нажата не будет.

Чтобы отправлять данные на Serial Monitor, воспользуемся функцией Serial.print(). В итоге, подключив Esplora и открыв Serial Monitor, вы увидите данные примерно такого рода:

Joystick X: 0 Joystick Y: 0 Button: 0

Чтобы получить значения, соответствующие передвижению курсора, воспользуемся функцией map() – она проведет адаптацию значений от джойстика, сохранив полученные числа в переменные.

Теперь, чтобы, собственно, передвигать курсор, воспользуемся функцией Mouse.move(). Ей требуется три аргумента – значения для оси X, для оси Y и для колесика мыши. В этом примере мы будем использовать только два из них – для перемещения курсора по осям X и Y.

Подключив Esplora, откройте среду разработки Arduino и нажмите Shift-Command-M, чтобы открыть Serial Monitor. Теперь, при передвижении рукоятки джойстика на Serial Monitor будут появляться значения, соответствующие перемещению курсора на экрану компьютера.

/*

Управление курсором мыши при помощи джойстика Esplora

Этот пример показывает, как считывать данные от джойстика, 
а затем использовать их для управления экранным курсором.
То есть ваша Esplora возьмет на себя роль компьютерной мышки.

Внимание! Данный скетч заберет управление мышкой и передаст его Esplora. В случае потери контроля над курсором, проделайте следующее:
1) отключите Esplora
2) откройте скетч «Перемигивание цветами на Esplora» (EsploraBlink) в IDE Arduino
3) снова подключая Esplora к компьютеру, зажмите у нее кнопку Reset
4) продолжая нажимать на Reset, кликните по кнопке Upload в IDE Arduino
5) увидев в IDE Arduino сообщение «Done Compiling», отпустите Reset

То есть, вы будете загружать скетч, не управляющий курсором мыши, благодаря чему Esplora перестанет управлять курсором вашего компьютера.
Создан 22 декабря 2012 Томом Иго (Tom Igoe),
обновлен 8 марта 2014 Скоттом Фитцджеральдом (Scott Fitzgerald).

http://www.arduino.cc/en/Reference/EsploraReadJoystickSwitch

Этот код не защищен авторским правом.

*/

#include <Esplora.h>

void setup()
{
  Serial.begin(9600);       // инициализируем последовательную передачу данных на компьютер
  Mouse.begin();            // перехватываем у мышки управление экранным курсором
}

void loop()
{
  int xValue = Esplora.readJoystickX();        // считываем данные джойстика по оси X 
  int yValue = Esplora.readJoystickY();        // считываем данные джойстика по оси Y
  int button = Esplora.readJoystickSwitch();   // считываем данные от кнопки джойстика
  Serial.print("Joystick X: ");                // выводим строку, обозначающую, что сейчас будет значение для оси X
  Serial.print(xValue);                        // выводим значение для оси X
  Serial.print("\tY: ");                       // выводим символ «Tab» и строку, обозначающую, что сейчас будет значение для оси Y
  Serial.print(yValue);                        // выводим значение для оси Y
  Serial.print("\tButton: ");                  // выводим символ «Tab» и строку, обозначающую, что сейчас будет значение от кнопки
  Serial.print(button);                        // выводим значение от кнопки

  int mouseX = map(xValue, -512, 512, 10, -10);  // масштабируем данные от X-оси джойстика (от -512 до 512) в диапазон для перемещения курсора по оси X (от -10 до 10)
  int mouseY = map(yValue, -512, 512, -10, 10);  // масштабируем данные от Y-оси джойстика (от -512 до 512) в диапазон для перемещения курсора по оси Y (от -10 до 10)
  Mouse.move(mouseX, mouseY, 0);                 // двигаем курсор

  if (button == 0) {                           // если нажата кнопка джойстика
    Mouse.press();                             // делаем клик мышью
  } else {
    Mouse.release();                           // если кнопка не нажата, отпускаем «кнопку», отвечающую за клик 
  }

  delay(10);                                  // делаем короткую задержку перед тем, как снова двигать курсор
}

См.также

  1. Esplora.readJoystickX()
  2. Esplora.readJoystickY()
  3. Esplora.readJoystickSwitch()
  4. Mouse and Keyboard library
  5. Mouse.begin
  6. Mouse.move()
  7. map()

Внешние ссылки