Arduino UNO урок 12 - Джойстик

  • Час 18-08-2015, 17:20
  • Автор admin
  • Коментарів 0 Комент.
  • Силка url

Для плат Arduino існують модулі аналогових джойстиків. Як правило, мають вісь X, Y і кнопку - вісь Z. Джойстик дозволяє більш плавно і точно відстежувати ступінь відхилення від нульової точки. А крім зручності в порівнянні з кнопками, це дозволяє реалізовувати більш досконалі інтерфейси. Наприклад, при зміні якого-небудь значення в меню, можна написати програму таким чином, що чим сильніше відхилена вісь джойстика, тим швидше змінюється значення змінної. Наприклад, нам необхідно змінити значення від 0 до 2000 з кроком в 1. Уявіть, скільки разів вам треба було б натискати кнопку або писати спеціальний алгоритм, скажімо при тривалості натискання більше 3 сек додавати змінювати крок на 10 або 100. А при використанні джойстика це можна реалізувати набагато простіше.

Середня ціна на ebay коливається в районі 7-10 $ за модуль (з безкоштовною доставкою в Росію). Знайти модуль на ebay дуже просто: в пошукове поле введіть запит joystick module.

Самі модулі виглядають приблизно так:

Arduino UNO урок 12 - Джойстик

Не лякайтеся кількістю висновків, це зроблено для універсальності і зручності підключення. Контакти Vcc і GND між усіма трьома групами контактів з'єднані. Т.ч. для підключення потрібно 5 проводів: вісь X, вісь Y, кнопка Z, харчування Vcc і загальний GND. Джойстики пасивні модулі і не споживають яку-небудь енергію від плати Arduino.

Схема підключення до Arduino:

Arduino UNO урок 12 - Джойстик

У програмі, працювати з джойстиком також дуже просто:

#define axis_X 0 // Вісь Х підключена до Analog 0 #define axis_Y 1 // Вісь Y підключена до Analog 1 #define axis_Z 2 // Вісь Z (кнопка джойстика) підключена до Digital 2 int value_X, value_Y, value_Z = 0; // Змінні для зберігання значень осей void setup () {pinMode (axis_Z, INPUT); // Задаємо як вхід Serial.begin (9600); } void loop () delay (250); // Затримка 250 мс

Як видно вище, на початку ми визначаємо вхідні Піни для осей (define), а потім у головному циклі зчитуємо значення з пинов і виводимо їх в Serial Monitor. І бачимо наступну картину:

Arduino UNO урок 12 - Джойстик

Як бачите все досить просто. І на останок напишемо невелику програму, метою якої буде змінювати значення змінної, залежно від відхилення джойстика по осі Y від нульової точки. А при натисканні на кнопку джойстика, змінна обнулятиметься.

#define axis_Y 1 // Вісь Y підключена до Analog 1 #define axis_Z 2 // Вісь Z (кнопка джойстика) підключена до Digital 2 int value, value_Y, value_Z = 0; // Змінні для зберігання значень осей void setup () {pinMode (axis_Z, INPUT); // Задаємо як вхід Serial.begin (9600); } void loop () {value_Y = analogRead (axis_Y); // Прочитуємо аналогове значення осі Y if (value_Y gt; = 0 && value_Y lt; 100) value = value - 10; if (value_Y gt; 100 && value_Y lt; 300) value = value - 5; if (value_Y gt; 300 && value_Y lt; 520) value = value - 1; if (value_Y gt; 535 && value_Y lt; 700) value = value + 1; if (value_Y gt; 700 && value_Y lt; 900) value = value + 5; if (value_Y gt; 900) value = value + 10; value_Z = digitalRead (axis_Z); // Прочитуємо цифрове значення осі Z (кнопка) if (value_Z == 0) value = 0; // Скидання значення Serial.println (value, DEC); // Виводимо значення в Serial Monitor delay (500); // Затримка 250 мс}

Висновок в Serial Monitor:

Arduino UNO урок 12 - Джойстик

Прикріплені файли:
  • joystick.rar (5 Кб)
Tags

Коментарі до новини