Джойстик – это прекрасный способ передачи данных для Arduino. Обычно джойстики используют для управления проектов в робототехнике, мобильных платформ и различных механизмов. Первое что приходит на ум при упоминании джойстика это несомненно игровые геймпады. Они просты и удобны в использовании, поэтому обрели такую популярность.
Принцип работы джойстика
Аналоговый джойстик выглядит как ручка, прикреплённая к шаровому шарниру с парой потенциометров, которые определяют оси X и Y. Они установлены под углом 90 градусов относительно друг друга. Помимо этого, джойстик имеет тактовую кнопку, которая срабатывает при вертикальном нажатии на ручку. Геймпады оснащены пружинкой, благодаря которой при отклонении с состояния покоя, джойстик после отпускания его с любой позиции плавно возвращается в исходное положение. Ещё джойстик помогает более плавно следить за степенью отклонения от нулевой точки ( состояния покоя ).
Необходимые составляющие
Для подключения и тестирования джойстика нам потребуется:
- Плата Arduino Uno
- Джойстик
- Светодиоды, 5 шт.
- Резисторы на 100 Ом, 3 шт.
- Соединительные провода
- Макетная плата
Распиновка модуля джойстика
Он содержит всего 5 контактов: два для подачи питания, два для определения осей X и Y, один для центрального переключателя. Как изображено на рисунке
Контакты:
VCC – для подачи питания. Подключаем его к 5 V.
GND – земля. Подключается к земле.
VRx/VRy – выходы потенциометров.
SW – выходи переключателя
Схема подключения
Суть программы и подробный разбор
Сама программа приведена ниже вместе с описанием ключевых моментов.
|
Протестируем программу
После проделанной работы, можем смело проверить наше творение. Теперь перемещая ось джойстика в различных направлениях мы можем поочередно включать 4 разных светодиода.
Вторая программа
Есть ещё одна программа, которую можно запустить как тестовую.
Для неё нам понадобиться:
- Микроконтроллер
- Джойстик
- Разъём ММ
- Макетная плата
- USB–кабель
Алгоритм включения
- Подключаем наш джойстик, как показано на схеме.
- Используя USB подключаем наш микроконтроллер к компьютеру.
- Загружаем программу, код похож на предыдущий, но результат будет другим, данный код позволяет менять цвет светодиода:
const int pinRed = 9;
const int pinGreen = 10;
const int pinBlue = 11;
const int swPin = 8;
const int pinX = A1; // X
const int pinY = A2; // Y
const int ledPin = 13;
boolean ledOn = false; // текущее состояние кнопки
boolean prevSw = false; // предыдущее состояние кнопки
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(pinRed, OUTPUT);
pinMode(pinGreen, OUTPUT);
pinMode(pinBlue, OUTPUT);
pinMode(pinX, INPUT);
pinMode(pinY, INPUT);
pinMode(swPin, INPUT);
digitalWrite(swPin, HIGH); // включаем встроенный подтягивающий резистор
}
void loop() {
if (isLedOn()) freeMode(); // если нажата кнопка и горит светодиод на пине 13, включаем режим «фонарик»
else discoMode(); // иначе включаем «цветомузыку»
}
boolean isLedOn() { // Определяем нажатие кнопки
if (digitalRead(swPin) == HIGH && prevSw == LOW) {
ledOn = !ledOn;
prevSw = HIGH;
}
else prevSw = digitalRead(swPin);
digitalWrite(ledPin, ledOn); // включаем светодиод на пине 13
return ledOn;
}
void freeMode() { // Режим «фонарик»
int X = analogRead(pinX); // считываем положение джойстика
int Y = analogRead(pinY);
int RED = map(Y, 512, 1023, 0, 255); // маппинг значений
int GREEN = map(X, 512, 1023, 0, 255);
int BLUE = map(X, 511, 0, 0, 255);
analogWrite(pinRed, RED); // включение каналов R,G,B
analogWrite(pinGreen, GREEN);
analogWrite(pinBlue, BLUE);
}
void discoMode() { // Режим «цветомузыка»
for (int i=0; i <= 255; i++) {
if (isLedOn()) { break; } // при нажатии кнопки выходим из цикла
analogWrite(pinRed, i); // работает канал RED
analogWrite(pinGreen, 0);
analogWrite(pinBlue, 0);
delay(5);
}
for (int i=0; i <= 255; i++) {
if (isLedOn()) { break; } // при нажатии кнопки выходим из цикла
analogWrite(pinRed, 0);
analogWrite(pinGreen, 0);
analogWrite(pinBlue, i); // работает канал BLUE
delay(5);
}
for (int i=0; i <= 255; i++) {
if (isLedOn()) { break; } // при нажатии кнопки выходим из цикла
analogWrite(pinRed, 0);
analogWrite(pinGreen, i); // работает канал GREEN
analogWrite(pinBlue, 0);
delay(5);
}
}
Заключение
Теперь мы умеем подключать двухосевой джойстик к Arduino. Джойстик даёт много возможностей управления и передачи сигналов. Из его плюсов можно отметить, что он лёгок в управлении и у него быстрый отклик.