Skip to contentSkip to main navigation Skip to footer

Arduino и джойстик

Описание


Джойстик – орган управления с двумя аналоговыми осями (X и Y) и одной кнопкой. Отлично подходит для управления в играх, а также некоторыми механизмами

Подключение


Подключается к питанию, аналоговые оси (VRX и VRY) – на аналоговые пины, кнопка SW – на цифровой пин. Кнопка никуда не подтянута, но это можно сделать средствами микроконтроллера. Джойстик удобнее подключать проводами папа-мама к макетке:

 

Примеры


Выводим в порт

Опросим обе оси джойстика и кнопку (умножим на 100 для лучшего масштаба) и выведем значения в порт через запятую. Подвигаем джойстиком, пощёлкаем кнопкой, посмотрим на график:

#define J_VRX 0
#define J_VRY 1
#define J_SW 3

void setup() {
  Serial.begin(9600);
  pinMode(J_SW, INPUT_PULLUP);
}

void loop() {
  Serial.print(analogRead(J_VRX));
  Serial.print(',');
  Serial.print(analogRead(J_VRY));
  Serial.print(',');
  Serial.println(digitalRead(J_SW) * 100);
}

Делаем диапазон удобнее

Оси джойстика ожидаемо выдают значение от 0 до 1023, а кнопка – инвертирована, так как при нажатии замыкается на GND. Работать с сырыми данными с джойстика не очень удобно, потому что нет “нуля”: он находится где-то в районе 500. Можно попробовать сделать по простому, через функцию map(). Преобразуем значения с осей в диапазон -100.. 100:

#define J_VRX 0
#define J_VRY 1
#define J_SW 3

void setup() {
  Serial.begin(9600);
  pinMode(J_SW, INPUT_PULLUP);
}

void loop() {
  Serial.print(map(analogRead(J_VRX), 0, 1023, -100, 100));
  Serial.print(',');
  Serial.print(map(analogRead(J_VRY), 0, 1023, -100, 100));
  Serial.print(',');
  Serial.println(digitalRead(J_SW) * 100);
}

В принципе стало удобнее, с такими значениями гораздо удобнее работать

Библиотека


Для более удобной работы с джойстиком можно использовать библиотеку GyverJoy. Она позволяет удобно калибровать джойстик, задавать мёртвую зону и плавность изменения значений. Подробное описание и примеры можно найти по ссылке выше.

Домашнее задание


  • Подключить джойстик вместо потенциометра в примерах к RGB светодиоду и попробовать смешивать и задавать цвет в разных цветовых пространствах
  • Кнопку (клики, удержания) можно обрабатывать при помощи библиотеки EncButton как в уроке

 

Полезный пример?

Похожие примеры
5 Комментариев
  • Не подключайте сразу джойстик, сперва прозвоните между пинами 5V и GND.
    Если замкнуто, то на обратной стороне есть место под резистор, его надо разъединить. Выход GND джойстика подключить к GND на плате (не как на рисунке в статье).

  • Вопрос по джойстикам. У меня их 3 штуки, на всех трёх одна и та же беда. В центральном продолжении они должны выдать 512 а в крайних или 0 или 1023. По факту они выдают крайние значения 0 и 1023 где то на 30-50 % хода стика, как это пофиксить?

    • Никак, преобретите более качественные джойстики. В подборке на сайте есть варианты.

Оставить комментарий

Ваш адрес email не будет опубликован.