Джойстик Ардуино – подключение и скетч. Делаем еще один джойстик (геймпад) на Arduino Ардуино управление серво джойстиком

Обзор тактильного Джойстика

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

Модуль двухосевого джойстик (рис. 1) имеет две степени свободы, представляет собой ручку, закреплённую на шаровом шарнире с двумя взаимно перпендикулярными осями.

Рисунок 1. Джойстик.

При наклоне ручки вращаются подвижные контакты каждого из двух потенциометров номиналом 10 кОм, которые определяют положение осей X и Y. Средний контакт каждого потенциометра выведен на контакты VRX и VRY разъема, а крайние подключены к питанию и земле. Также джойстик оснащен тактовой кнопкой, которая срабатывает при вертикальном нажатии на ручку, показания снимаются с контакта SW. После отпускания джойстик возвращается в первоначальное центральное состояние.

Технические характеристики

    Напряжение питания: номинальное 3.0…5,5 В;

    Выходной сигнал: цифровой (кнопка) и аналоговый (оси X и Y);

    Размеры: 26 мм x 40 мм x 22 мм.

Подключение к плате Arduino

Для подключения модуля джойстика к плате Arduino будем использовать два аналоговых и один цифровой вывод Arduino, а также с платы Arduino подаем питание на контакты джойстика GND и +5V. Схема подключения показана на рисунке 2.


Рисунок 2. Схема подключения модуля джойстика к плате Arduino.

Напишем скетч получения данных с джойстика. Данные с потенциометров по осям X и Y могут принимать значения от 0 до 1023. Неподвижному положению джойстика соответствуют значение 511 для каждого потенциометра. При нажатии на кнопку на входе 3 Arduino будет появляться 0. Чтобы не было наводок, вывод кнопки необходимо подтянуть к +5 В. Данные выводим в последовательный порт.

Содержимое скетча показано в листинге 1.


Листинг 1

#define PIN_VRX A0

#define PIN_VRY A1

// пин подключения кнопки

#define PIN_BUTTON 3

Serial.begin (9600);

// Выводим значение по оси X

Serial.print("X = ");

Serial.println(analogRead(PIN_VRX));

// Выводим значение по оси Y

Serial.print("Y = ");

Serial.println(analogRead(PIN_VRY));

// Состояние кнопки

Serial.print("button = ");

if (digitalRead(PIN_BUTTON) == HIGH) {

Serial.println ("NOT CLICK");

Serial.println ("CLICK!");

// Пауза 1 сек

Загружаем скетч на плату Arduino, открываем монитор последовательного порта и видим вывод данных при изменении положения джойстика (рис. 3).


Рисунок 3. Вывод данных с джойстика в монитор последовательного порта.

Пример использования

Рассмотрим пример использования джойстика для управления подвесом для камеры на сервоприводах. Нам потребуются следующие детали:

    плата Arduino Uno – 1 шт;

    плата прототипирования – 1 шт;

    модуль джойстика – 1 шт;

    сервопривод – 2 шт;

    подвес для камеры – 1 шт;

    блок питания 5В – 1 шт;

Схема подключения показана на рисунке 4.


Рисунок 4. Схема подключения модуля джойстика и подвеса на сервоприводах к плате Arduino.

Считываем показания джойстика для каждой из осей X, Y и переводим их в значение угла поворота соответствующего сервопривода. Чтобы убрать дрожание сервопривода не реагируем на маленькие изменения положения джойстика.

Содержимое скетча показано в листинге 2.


Листинг 2

// подключение библиотеки Servo

#include

// пины подключения сервоприводов

#define PIN_SERVO_X 9

#define PIN_SERVO_Y 10

// пин подключения контакта VRX

#define PIN_VRX A0

// пин подключения контакта VRY

#define PIN_VRY A1

// пин подключения кнопки

#define PIN_BUTTON 3

// создание объектов Servo

// служебные переменные

int angleX, angleY;

// запуск последовательного порта

Serial.begin (9600);

// подключить управление сервоприводом к пинам

// PIN_SERVO_X и PIN_SERVO_Y

servoX.attach(PIN_SERVO_X);

servoY.attach(PIN_SERVO_Y);

// получение данных с джойстика

joyX=analogRead(PIN_VRX);

joyY=analogRead(PIN_VRY);

// Выводим значение по оси X

Serial.print("X = ");

Serial.print(joyX);

// Выводим значение по оси Y

Serial.print(" Y = ");

Serial.println(joyY);

// сравнение с предыдущими

if(abs(joyX-joyXpr)>10) { // повернуть по оси X

angleX=map(joyX,0,1023,0,180);

servoX.write(angleX);

if(abs(joyY-joyYpr)>10) { // повернуть по оси Y

angleY=map(joyY,0,1023,0,180);

servoY.write(angleY);

// время на перемещение сервопривода

Загружаем скетч на плату Arduino, и управляем подвесом с помощью джойстика.



Рисунок 5-6. Схема в сборе.

Часто задаваемые вопросы

1. Не изменяются данные на аналоговых выводах Arduino при изменении положения джойстика.

2. Значение кнопки джойстика принимает случайные значения или не изменяется тока отрицательное

    Проверьте правильность подключения джойстика к плате Arduino.

    Подтяните вывод кнопки к питанию через резистор 4.7 кОм.

Использование джойстика – это один из способов обмена информацией между человеком и устройством (компьютер, микроконтроллер) на основе Arduino. Чаще всего их используют для управления механизмами или роботами. По аналогии с привычным игровым миром джойстики также часто называют геймпадами. Геймпад прост и удобен в использовании. Сегодня существует большое количество видов джойстиков по количеству степеней свободы, частоте считывания информации и используемой технологии. В данной статье мы рассмотрим наиболее популярный вариант, научимся управлению джойстиком и узнаем, как его подключать.

Аналоговый джойстик выглядит как ручка, которая закрепляется на шарнире с двумя потенциометрами, определяющими оси X и Y, и кнопкой Z. Наклон или поворот ручки вращает специальный подвижный контакт, из-за чего изменяется выходное напряжение. Сам геймпад оснащен пружиной, благодаря которой плавно возвращается в первоначальное центральное состояние после отпускания его с какой-либо позиции. Устройство позволяет более плавно отследить степень отклонения от центральной (нулевой) точки.

Подключение джойстика к ардуино

Подключение джойстика к Arduino Uno выполняется по схеме, приведенной ниже.

На модуле имеется 5 выходов – Vcc, Gnd, X, Y и Key (обозначения могут различаться в зависимости от устройства).

Данные по оси X выводятся на вход А0, по оси Y – на А1. Для визуального контроля нажатия кнопки также можно подключить светодиод D11. Питание осуществляется напряжением 5 Вольт. Пин GND присоединяется к такому же пину на плате Ардуино. Контакт SW можно подсоединить к любому цифровому пину.

Как видим, подключение модуля джойстика не сложно. Если устройство не работает после подключения, проверьте, правильно ли вы подсоединили все пины.

Как отслеживать текущее положение или направление джойстика

Для использования джойстка в реальном проекте нам понадобится написать скетч, чтобы обрабатывать данные, которые отправляет джойстик во время своей работы.

Узнать, в каком положении в текущий момент находится устройство, можно в зависимости от значений потенциометров. Перемещение происходит по направлению находящихся перпендикулярно осей X и Y. Считывание информации с геймпада происходит с помощью – она показывает значения в диапазоне от 0 до 1023. В качестве аргументов ей поступают номера пинов, к которым произведено подключение джойстика:

Serial.println(analogRead(A0)); // показывает положение X координаты

Serial.println(analogRead(A1)); // показывает положение Y координаты

Для удобства советуется использовать константы, чтобы уменьшить и упростить итоговый код. Аналоговые пины как раз можно объявить постоянными:

const byte PIN_ANALOG_X = A0; // постоянная для координаты Х

const byte PIN_ANALOG_Y = A1; // постоянная для координаты Y

Определение направления движения джойстиком

Управление с помощью джойстика подразумевает собой то, что мы должны узнать направление движения ручки джойстика. Для этого нам придется получить и интерпретировать данные по всем осям.

По значению положений осей X и Y можно узнать, находится ли джойстик в центре или произошло смещение. Значения во всех направлениях находятся в диапазоне от 0 до 1023, как говорилось ранее. В первую очередь приходит мысль, что центральная точка будет находиться примерно в значении 511-512. Это заключение не совсем правильно, так как абсолютно точное положение определить нельзя.

Неверное определение центрального значения может привести к тому, что будет получена ошибочная информация о движении джойстика, если он будет находиться в неподвижном состоянии. Для этого следует выбрать числовой диапазон и условно считать, что любое значение в нем будет центральной точкой. Значения нужно подстраивать под каждый вид джойстика, но примерно оно будет в диапазоне 505-518. Полученные значения записываются в код в виде постоянных:

const int X_THRESHOLD_LOW = 505;

const int X_THRESHOLD_HIGH = 518;

const int Y_THRESHOLD_LOW = 500;

const int Y_THRESHOLD_HIGH = 510;

Следующим шагом будет преобразование координат в диапазон от -1 до 1. Для X -1 – это перемещение влево, 0 – нет движения, 1 – вправо. По Y -1 – движение вниз, 0 – центральное значение, 1 – вверх. Изначально устанавливаем все значения в центр 0. Для проверки, происходит ли перемещение, используем выражения if/else.

Подводные камни в работе геймпада

Как и с любое устройство, джойстики не лишены недостатков. В первую очередь, наличие пружины не позволяет ручке точно вернуться в центральное положение из-за трения в механических деталях. Это приводит к тому, что приходится программно определять центральное положение, вернее диапазон значений, в которых любая точка будет условно считаться серединой.

Второй проблемой можно назвать наличие так называемых мертвых зон. Два крайних значения при наибольших отклонениях должно быть равным 0 В и напряжению питания. В действительности эти значения могут различаться, так как не используется весь электрический диапазон изменения сопротивления. Для решения этой проблемы крайние точки могут соответствовать значениям 1 кОм и 9 кОм.

Плата расширения JoyStick shield

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

Рассмотрим, что представляет собой этот шилд от известного в мире ардуино производителя Sparkfun. Данный геймпад работает исправно и стоит относительно недорого. Устройство может поставляться в немного разобранном виде, так что сначала его нужно собрать.


Шилд содержит несколько стандартных кнопок (4 обычных сбоку и кнопка выбора). В зависимости от модели, на плате могут быть добавлены разъемы для подключения модулей bluetooth или wifi. Традиционно, с помощью выходов пинов и гребенки можно подключать внешние устройства.

Заключение

Джойстик ардуино – незаменимая вещь во моих проектах. Благодаря этому виду датчиков вы можете добавить в свое устройство удобные и современные средства управления. В некоторых ситуациях без джойстика вообще обойтись практически невозможно: джойстик ардуино используется для управления роботами, умными машинами, сервоприводами, громкостью музыкой и яркостью подсветки на мониторе, как навигация в различных играх и во многих других проектах.

Подключение готового модуля не сложно, так же весьма доступным является и сам управляющий скетч. Чаще всего, джойстик используется в месте с кнопками и в паре с беспроводными интерфейсами, потому то управлять джойстиком на проводе быстро перемещающимися устройствами практически невозможно. Поэтому рекомендуется для работы использовать готовые шилды, в которых есть все необходимое.

Новые статьи

● Проект 18: Обрабатываем данные от джойстика. Управление Pan/Tilt Bracket с помощью джойстика

В этом эксперименте мы рассмотрим подключение к Arduino двухосевого аналогового джойстика.

Необходимые компоненты:

Для управления каким-либо устройством на основе Arduino, перемещающимся в двухмерной системе координат, отлично подойдет джойстик. Для плат Arduino существуют модули аналогового джойстика, имеющие ось X, Y (потенциометры 10 кОм) и дополнительную кнопку - ось Z. Джойстик позволяет плавно и точно отслеживать степень отклонения от нулевой точки. Сам джойстик подпружиненный, поэтому он будет возвращаться в центральное состояние после его отпускания из определенной позиции.
Контакты Vcc и GND между всеми тремя группами контактов соединены. Таким образом, для подключения нужно 5 проводов: ось X, ось Y, кнопка Z, питание Vcc и общий GND. Джойстики - пассивные модули и не потребляют какую-либо энергию от платы Arduino. Выводы VERT и HORZ подключаются к аналоговым входам A0 и A1 Arduino, SEL - к цифровому входу D2. Схема подключения показана на рис. 18.1.

Рис. 18.1. Схема подключения платы джойстика к Arduino

Напишем скетч считывания данных джойстика и вывода значений в монитор последовательного порта Arduino IDE. Содержимое скетча показано в листинге 18.1.

Const int axisX=A0 // ось Х подключена к A0 const int axisY=A1 // ось Y подключена к A1 const int axisZ=2 // ось Z (кнопка джойстика) подключена к D2 int valX, valY, valZ = 0 ; void setup () { pinMode(axis_Z, INPUT_PULLUP); // конфигурируем D2 как INPUT с включением // подтягивающего резистора внутри процессора Serial.begin(9600 ); } void loop () { valX = analogRead(axisX); // значение оси Х valY = analogRead(axisY); // значение оси Y valZ = 1 -digitalRead(axisZ); // значение оси Z (кнопка) // выводим значения в монитор Serial.print("X:" );Serial.print(valX, DEC); Serial.print(" | Y:" );Serial.print(valY, DEC) Serial.print(" | Z: " );Serial.println(valZ, DEC); delay(500 ); // пауза перед следующим считыванием данных }
Порядок подключения:

1. Подключаем джойстик к плате Arduino по схеме на рис. 18.2.
2. Загружаем в плату Arduino скетч из листинга 18.1.
3. Смотрим в мониторе последовательного порта Arduino IDE вывод значений смещения по осям X и Y и состояние кнопки (ось Z).

Рис. 18.2. Схема подключения платы джойстика и Pan/Title Bracket к Arduino


Создадим более понятный пример использования джойстика для управления положением кронштейна Pan/Titl Bracket с двумя сервоприводами, на котором можно разместить, например, камеру и менять положение камеры влево/вправо и вниз/вверх с помощью джойстика. Схема соединений для данного эксперимента показана на рис. 18.2.
Перемещением джойстика по оси X мы будем управлять поворотом нижнего сервопривода (влево/вправо), перемещением джойстика по оси Y будем управлять поворотом верхнего сервопривода (вверх/вниз). Среднее нейтральное положение джойтика по каждой оси (при аналоговом значении 512) соответствует углу поворота сервопривода на угол 90°. Содержимое скетча показано в листинге 18.2.

#include // подключение библиотеки Servo Servo servo1, servo2; const int pinServo1=8 ; // Пин для подключения 1 сервопривода const int pinServo2=9 ; // Пин для подключения 2 сервопривода // переменные для хранения углов поворота сервоприводов int angleServo1,angleServo2 = 0 ; const int axisX=A0; // ось Х подключена к A0 const int axisY=A1; // ось Y подключена к A1 int valX, valY = 0 ; // переменные для хранения значений осей void setup () { // подключить переменную servo1 к выводу pinServo1 servo1.attach(pinServo1); // подключить переменную servo2 к выводу pinServo2 Servo2.attach(pinServo2); } void loop () { valX = analogRead(axisX); // значение оси Х valY = analogRead(axisY); // значение оси Y // масштабируем значение к интервалу 0-180 angleServo1=map (valX,0 ,1023 ,0 ,180 ); angleServo2=map (valY,0 ,1023 ,0 ,180 ); // поворот сервоприводов на полученный угол servo1.write(angleServo1); servo2.write(angleServo2); delay(15 ); // пауза для ожидания поворота сервоприводов }
Порядок подключения:

1. Собираем Pan/Title Bracket и сервоприводы.
2. Подключаем джойстик и Pan/Title Bracket к плате Arduino по схеме на рис. 18.2.
3. Загружаем в плату Arduino скетч из листинга 18.2.
4. Управляем положением Pan/Title Bracket перемещением джойстика по осям X и Y.

Листинги программ

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

Средняя цена на подобные модули колеблется в районе 1-2$ за модуль (с бесплатной доставкой в Россию). Поиск модулей в магазине AliExpress

Сами модули выглядят примерно так:

Не пугайтесь количеством выводов, это сделано для универсальности и удобства подключения. Контакты Vcc и GND между всеми тремя группами контактов соединены. Т.о. для подключения нужно 5 проводов: ось X, ось Y, кнопка Z, питание V cc и общий GND. Джойстики пассивные модули и не потребляют какую-либо энергию от платы Arduino. Питание V cc необходимо только для подтягивающих резисторов. Бывают модули без подтягивающих резисторов, в таком случае, необходимо вывод подключения кнопки подтянуть к +V cc через резистор 1-10 кОм.

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

В программе, работать с джойстиком также очень просто:

#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() { value_X = analogRead(axis_X); // Считываем аналоговое значение оси Х Serial.print("X:"); Serial.print(value_X, DEC); // Выводим значение в Serial Monitor value_Y = analogRead(axis_Y); // Считываем аналоговое значение оси Y Serial.print(" | Y:"); Serial.print(value_Y, DEC); // Выводим значение в Serial Monitor value_Z = digitalRead(axis_Z); // Считываем цифровое значение оси Z (кнопка) value_Z = value_Z ^ 1; // Инвертируем значение Serial.print(" | Z: "); Serial.println(value_Z, DEC); // Выводим значение в Serial Monitor delay(250); // Задержка 250 мс }

Как видно выше, в начале мы определяем входные пины для осей (define), а потом в главном цикле считываем значения с пинов и выводим их в Serial Monitor. И видим следующую картину:

Как видите все довольно просто. И напоследок напишем небольшую программу, целью которой будет изменять значение переменной, в зависимости от отклонения джойстика по оси 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 >= 0 && value_Y < 100) value = value - 10; if(value_Y > 100 && value_Y < 300) value = value - 5; if(value_Y > 300 && value_Y < 520) value = value - 1; if(value_Y > 535 && value_Y < 700) value = value + 1; if(value_Y > 700 && value_Y < 900) value = value + 5; if(value_Y > 900) value = value + 10; value_Z = digitalRead(axis_Z); // Считываем цифровое значение оси Z (кнопка) if(value_Z == 0) value = 0; // Сброс значения Serial.println(value, DEC); // Выводим значение в Serial Monitor delay(500); // Задержка }

Является модулем ввода данных. С его помощью можно управлять роботами, манипуляторами, станками, различными моделями (машинки, танки, самолёты, вертолёты, квадрокоптеры, лодки и т.д.), а также использовать для создания игровых приставок, выбора пунктов меню на дисплеях и индикаторах, ввода значений, и т.д. Джойстик можно не только перемещать по осям X и Y, но и нажимать на него.

Видео:

Спецификация:

  • Напряжение питания: 5 В / 3,3 В (оба напряжения входят в диапазон допустимых значений).
  • Потребляемый ток: < 10 мА
  • Габариты: 30x30 мм

Все модули линейки "Trema" выполнены в одном формате

Подключение:

  • Выводы «X» и «Y» модуля подключается к любым аналоговым входам Arduino . Значения, считываемые с этих выводов, растут при перемещении джойстика слева на право и снизу вверх.
  • Вывод «K» является цифровым и подключается к любому выводу Arduino . В обычном состоянии на нём уровень логического «0», а при нажатии на джойстик, он меняется на логическую «1».
  • Выводы «V» и «G» являются выводами питания.

Модуль удобно подключать 3 способами, в зависимости от ситуации:

Способ - 1: Используя проводной шлейф и Piranha UNO

Используя провода «Папа - Мама », подключаем напрямую к контроллеру Piranha UNO


Способ - 2: Используя Trema Set Shield

Модуль можно подключить к любому из аналоговых входов Trema Set Shield.


Способ - 3: Используя проводной шлейф и Shield

Используя 5-и проводной шлейф, к Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO и тд.


Питание:

Входное напряжение 5 В или 3,3 В постоянного тока, подаётся на выводы Vcc (V) и GND (G).

Подробнее о модуле:

Данные модуля считываются с двух потенциометров и тактовой кнопки, механически связанных с рычагом джойстика. Кнопка подключена в разрыв питания Vcc и выхода «K», который прижат к GND через резистор. Следовательно, на выходе «K» может устанавливаться только два состояния: логический «0» (кнопка отпущена) или «1» (кнопка нажата). Выводы координат «X» и «Y» являются аналоговыми выходами модуля, они подключены к потенциометрам так, что напряжение снимаемое между этими выводами и GND растет при перемещении джойстика слева на право и снизу вверх.

Примеры:

Определение положения джойстика и включение светодиода по нажатию кнопки

const int8_t Xaxis = A0; // Определяем номер вывода, к которому подключен контакт оси Х джойстика const int8_t Yaxis = A1; // Определяем номер вывода, к которому подключен контакт оси У джойстика const int8_t Button = 2; // Определяем номер вывода, к которому подключен контакт кнопки джойстика const int8_t LED = 7; // Определяем номер вывода, к которому подключен светодиод uint16_t XborderMIN = 505; // Задаём границу значений, НИЖЕ которой будет считаться, что джойстик отклонён по оси Х влево uint16_t XborderMAX = 515; // Задаём границу значений, ВЫШЕ которой будет считаться, что джойстик отклонён по оси Х вправо uint16_t YborderMIN = 505; // Задаём границу значений, НИЖЕ которой будет считаться, что джойстик отклонён по оси У вниз uint16_t YborderMAX = 515; // Задаём границу значений, ВЫШЕ которой будет считаться, что джойстик отклонён по оси У вверх uint16_t Xvol = 0, Yvol = 0; // Задаём переменные, которые будут принимать значения, считанные с осей джойстика void setup() { Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта pinMode(LED, OUTPUT); // Настраиваем вывод LED на работу в режиме выхода pinMode(Button, INPUT); // Настраиваем вывод Button на работу в режиме входа } void loop() { Xvol = analogRead(Xaxis); // Считываем значения оси Х Yvol = analogRead(Yaxis); // Считываем значения оси У if (Xvol < XborderMIN) { // Проверяем, полученное значение Х меньше нижней границы центрального положения или нет. Если да, то if (Yvol < YborderMIN) { // проверяем, полученное значение У меньше нижней границы центрального положения или нет. Если да, то Serial.println("Left-Down"); // значит джойстик находится в положении ВЛЕВО-ВНИЗ } else if (Yvol > YborderMAX) { // Если же полученное значение У больше верхней границы центрального положения, то Serial.println("Left-Up"); // значит джойстик находится в положении ВЛЕВО-ВВЕРХ } else { Serial.println("Left"); // Если же полученное значение У входит в границы центрального положения по оси У, значит джойстик отклонён ВЛЕВО } } else if (Xvol > XborderMAX) { // Проверяем, полученное значение Х больше верхней границы центрального положения или нет. Если да, то if (Yvol < YborderMIN) { // проверяем, полученное значение У меньше нижней границы центрального положения или нет. Если да, то Serial.println("Right-Down"); // значит джойстик находится в положении ВПРАВО-ВНИЗ } else if (Yvol > YborderMAX) { // Если же полученное значение У больше верхней границы центрального положения, то Serial.println("Right-Up"); // значит джойстик находится в положении ВПРАВО-ВВЕРХ } else { Serial.println("Right"); // Если же полученное значение У входит в границы центрального положения по оси У, значит джойстик отклонён ВПРАВО } } else { // Если полученное значение Х входит в границы центрального положения по оси Х, значит if (Yvol < YborderMIN) { // проверяем, полученное значение У меньше нижней границы центрального положения или нет. Если да, то Serial.println("Down"); // значит джойстик находится в положении ВНИЗ } else if (Yvol > YborderMAX) { // Если же полученное значение У больше верхней границы центрального положения, то Serial.println("Up"); // значит джойстик находится в положении ВВЕРХ } else { Serial.println("Center"); // Если же полученное значение У входит в границы центрального положения по оси У, значит джойстик находится в центре. } } if (digitalRead(Button)) { // Проверяем, нажата ли кнопка delay(1); // Если кнопка была нажата, то подавляем дребезг digitalWrite(LED, !digitalRead(LED)); // и меняем состояние на выходе светодиода Serial.println("Button click!"); // Выводим текст о том, что кнопка была нажата while (digitalRead(Button)) {} // Если кнопка удерживается, то ничего не делаем delay(10); // Если кнопка отпускается, то подавляем дребезг } }

В мониторе последовательного порта вы увидите.

Поделитесь с друзьями или сохраните для себя:

Загрузка...