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

Подключение джойстика к Arduino позволит сделать дистанционное управление с помощью джойстика машинкой или роботом на Ардуино. Рассмотрим в статье, как подключить джойстик шилд самостоятельно и сделать управление сервоприводом с помощью джойстика на Ардуино. Представим несколько скетчей и дадим схему подключения джойстика к микроконтроллеру Arduino Nano или Arduino Uno.

Джойстик схема подключения к Ардуино

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

Как подключить джойстик к Arduino Nano и Arduino Uno

У модуля джойстика KY-023 есть свои недостатки. Дело в том, что ручка джойстика не всегда точно возвращается в центральное положение, поэтому следует учитывать в программе центральное положение ручки, как некоторый диапазон значений, а не точное значение. То есть, при положении ручки джойстика в центре, значение X и Y координат может находиться в диапазоне от 490 до 530, вместо 512.

Подключение джойстика к Arduino UNO

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • модуль джойстика ky-023;
  • 2 светодиода и 2 резистора;
  • макетная плата;
  • провода «папа-мама», «папа-папа».
Схема подключения аналогового джойстика к Ардуино Уно

После подключения к Ардуино джойстика, загрузите следующий скетч. В данном примере на монитор порта будут выводиться данные с джойстика, а при нажатии кнопки будет выключаться светодиод на плате, подключенный параллельно к Pin 13. Соберите схему с джойстиком, как показано на схеме выше, загрузите скетч и откройте монитор порта программы Arduino IDE.

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

#define pinX A2 // ось X джойстика #define pinY A1 // ось Y джойстика #define swPin 2 // кнопка джойстика #define ledPin 13 // светодиод на Pin 13 void setup () { Serial .begin (9600); pinMode (ledPin, OUTPUT ); pinMode (pinX, INPUT ); pinMode (pinY, INPUT ); pinMode (swPin, INPUT ); digitalWrite (swPin, HIGH ); } void loop () { boolean ledState = digitalRead (swPin); // вкл./выкл. светодиод // считываем значение оси Х // считываем значение оси Y Serial .print (X); // выводим в Serial Monitor Serial .print ("\t" ); // табуляция Serial .println (Y); }

Скетч. Управление джойстиком светодиодами

Теперь можно усложнить схему, сделав плавное включение светодиода , управляемое от джойстика. Для этого подключите два светодиода через резистор к аналоговым портам 5 и 6. В следующем скетче, с помощью функции map() , переменные X и Y преобразуются из диапазона чисел от 0 до 1023 в диапазон чисел от 0 до 255. Подключите светодиоды к пинам 5 и 6 Ардуино и загрузите следующий скетч.

#define pinX A2 // ось X джойстика #define pinY A1 // ось Y джойстика #define swPin 2 // кнопка джойстика #define ledPin 13 // светодиод на Pin 13 #define ledX 5 // светодиод на Pin 5 #define ledY 6 // светодиод на Pin 6 void setup () { pinMode (ledX, OUTPUT ); pinMode (ledY, OUTPUT ); pinMode (ledPin, OUTPUT ); pinMode (pinX, INPUT ); pinMode (pinY, INPUT ); pinMode (swPin, INPUT ); digitalWrite (swPin, HIGH ); } void loop () { boolean ledState = digitalRead (swPin); // считываем состояние кнопки digitalWrite (ledPin, ledState); // вкл./выкл. светодиод int X = analogRead (pinX); // считываем значение оси Х int Y = analogRead (pinY); // считываем значение оси Y X = map (X, 0, 1023, 0, 255); // преобразуем значение X в другой диапазон Y = map (Y, 0, 1023, 0, 255); // преобразуем значение Y в другой диапазон analogWrite (ledX, X); // включаем светодиоды с разной яркостью analogWrite (ledY, Y); }

Пояснения к коду:

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

Является модулем ввода данных. С его помощью можно управлять роботами, манипуляторами, станками, различными моделями (машинки, танки, самолёты, вертолёты, квадрокоптеры, лодки и т.д.), а также использовать для создания игровых приставок, выбора пунктов меню на дисплеях и индикаторах, ввода значений, и т.д. Джойстик можно не только перемещать по осям 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); // Если кнопка отпускается, то подавляем дребезг } }

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

Инструкция

Джойстик - удобное и лёгкое в использовании устройство для передачи информации. Видов джойстиков по количеству степеней свободы, принципу считывания показаний и используемым технологиям существует большое количество. Джойстики чаще всего используются для управления движением каких-либо механизмов, управляемых моделей, роботов. Аналоговый джойстик, который мы сегодня рассмотрим, представляет собой ручку, закреплённую на шаровом шарнире с двумя взаимно перпендикулярными осями. При наклоне ручки, ось вращает подвижный контакт потенциометра, благодаря чему изменяется напряжение на его выходе. Также аналоговый джойстик имеет тактовую кнопку, которая срабатывает при вертикальном надавливании на ручку.

Подключим джойстик по приведённой схеме. Аналоговые выходы X и Y джойстика подключим к аналоговым входам A1 и A2 Arduino, выход кнопки SW - к цифровому входу 8. Питание джойстика осуществляется напряжением +5 В.

Для того чтобы наглядно увидеть, как работает джойстик, напишем такой скетч. Объявим пины, зададим им режимы работы. Обратите внимание, в процедуре setup() мы подали на вход switchPin высокий уровень. Этим мы включили встроенный подтягивающий резистор на этом порту. Если его не включить, то, когда кнопка джойстика не нажата, 8-ой порт Arduino будет висеть в воздухе и ловить наводки. Это повлечёт за собой нежелательные хаотичные ложные срабатывания.

В процедуре loop() мы постоянно опрашиваем состояние кнопки и отображаем его с помощью светодиода на выходе 13. Из-за того, что вход switchPin подтянут к питанию, светодиод постоянно горит, а при нажатии кнопки гаснет, а не наоборот.

Далее мы считываем показания двух потенциометров джойстика - выхода осей X и Y. Arduino имеет 10-разрядные АЦП, поэтому значения, снимаемые с джойстика, лежат в диапазоне от 0 до 1023. В среднем положении джойстика, как видно на иллюстрации, снимаются значения в районе 500 - примерно середина диапазона.

Обычно джойстик используют для управления электродвигателями. Но почему бы не использовать его, например, для управления яркостью светодиода? Давайте подключим по приведённой схеме RGB светодиод (или три обычных светодиода) к цифровым портам 9, 10 и 11 Arduino, не забывая, конечно, о резисторах.

Будем менять яркость соответствующих цветов при изменении положения джойстика по осям, как показано на рисунке. Из-за того, что джойстик может быть не точно отцентрирован производителем и иметь середину шкалы не на отметке 512, а от 490 до 525, то светодиод может слегка светиться даже когда джойстик находится в нейтральном положении. Если вы хотите, чтобы он был полностью выключен, то внесите в программу соответствующие поправки.

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

Сначала объявим соответствие пинов и две переменные - ledOn и prevSw - для работы с кнопкой. В процедуре setup() назначим пинам функции и подключим к пину кнопки подтягивающий резистор командой digitalWrite(swPin, HIGH) .

В цикле loop() определяем нажатие кнопки джойстика. При нажатии на кнопку переключаем режимы работы между режимом "фонарика" и режимом "цветомузыки".

В режиме freeMode() управляем яркостью светодиодов с помощью наклона джойстика в разные стороны: чем сильнее наклон по оси, тем ярче светит соответствующий цвет. Причём преобразование значений берёт на себя функция map(значение, отНижнего, отВерхнего, кНижнему, кВерхнему) . Функция map() переносит измеренные значения (отНижнего, отВерхнего) по осям джойстика в желаемый диапазон яркости (кНижнему, кВерхнему). Можно то же самое сделать обычными арифметическими действиями, но такая запись существенно короче.

В режиме discoMode() три цвета попеременно набирают яркость и гаснут. Чтобы можно было выйти из цикла при нажатии кнопки, каждую итерацию проверяем, не была ли нажата кнопка.

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

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

Этот модуль производит на выходе около 2,5 В от X и Y, когда он находится в положение покоя. Перемещение джойстика приведет к изменению выходного сигнала от 0 В до 5 В в зависимости от его направления. Если вы подключите этот модуль к микроконтроллеру, вы можете ожидать, что значение будет около 512 в положении покоя.

Когда вы перемещаете джойстик, вы можете увидеть, что значения изменяются от 0 до 1023, в зависимости от его положения.

Принцип действия

В приведенном ниже коде мы определили оси X и Y модуля джойстика для аналогового вывода A0 и A1 соответственно:

#define joysX Ad0 #define joysY As1

Теперь в приведенном ниже коде мы инициализируем PIN 2 для аrduino для коммутатора модуля Joystick, а значение buttonsdtate и buttonsdtate1 будет 0 в начале описываемой программы:

Int buttons = 2; int buttonSdtate = 0; int buttonSdtate1 = 0;

В приведенном ниже коде устанавливаем необходимую скорость передачи до 9600 и определяем Pin 7, как выходной вывод, и контакт кнопки в качестве входного контакта. Первоначально контактная кнопка остается высокой, пока пользователь не нажмет на соответствующий переключатель.

Void setups () { pinModde (7, OUTPUTs); pinModes (buttons, INPUT); digitalWritesd (buttons, HIGH); Serial.beginsdf (9600); }

Здесь, в этом коде считываем значения из аналогового вывода A0 и A1 и последовательно выводим на устройство:

Int xValuess = analogReadd (joysX); int yValuef = analogReadd (joysY); Serial.prints(xValues); Serial.prinst ("\ f"); Serial.printlns (yValues);

Условия включения и выключения светодиода в соответствии с движением вала джойстика определяются в приведенном ниже коде. Здесь мы просто принимаем аналоговые значения напряжения на выводах A0 и A1 аrduino. Эти аналоговые значения будут меняться при перемещении джойстика, и светодиод будет светиться в соответствии с движением джойстика.

Это условие для перемещения вала джойстика в направлении оси Y:

If (xValues > = 0 && yValues <= 10){ digitalWrites (10, HIGHd); } else { digitalWrites (10, LOWd); }

If (xValues <= 10 && yValued> = 500) { digitalWrites (11, HIGHd); } else { digitalWrites (11, LOWsd); }

Это условие для перемещения вала джойстика в направлении оси X:

If (xValues> = 1020 && yValues> = 500) { digitalWrites (9, HIGHd); } else { digitalWrites (9, LOWf); }

Нижеописанный код – это условие для перемещения вала сконструированного прибора в направлении оси Y:

if (xValues> = 500 && yValues> = 1020) { digitalWrites (8, HIGHf); } else { digitalWrites (8, LOWf); }

Когда мы перемещаем ось джойстика по диагонали, тогда одно положение приходит, когда аналоговое значение X и Y будет равно 1023 и 1023 соответственно, и светодиоды Pin 9, и Pin 8 будут светиться. Потому что он удовлетворяет условию светодиода. Итак, для устранения этого несоответствия указывается условие, что если значение (X, Y) равно (1023, 1023), то оба светодиода остаются в выключенном состоянии:

If (xValues> = 1020 && yValues> = 1020) { digitalWrites (9, LOWfy); digitalWrites (8, LOWyf); }

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

If (buttonStatesy == LOWfy) { Serial.printlnsy («Switch = Highy»); digitalWritesy (7, HIGHf); } else { digitalWritesy (7, LOWfy);

Необходимые инструменты, материалы и программы

Для осуществления проекта “аrduino joystick” потребуются следующие материалы:

  • модуль джойстика;
  • светодиоды – 5 штук;
  • резистор на 100 ом - 3 штуки;
  • соединительные провода;
  • макет.

Сборка устройства

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

Этот модуль джойстика имеет две оси. Они представляют собой ось X и ось Y. Каждая ось монтируется на потенциометр или горшок. Средние точки этих горшков определяются, как Rx и Ry. Таким образом, Rx и Ry являются переменными точками для этих горшков. Когда прибор находится в режиме ожидания, Rx и Ry действуют, как делитель напряжения.

Когда arduino джойстик перемещается вдоль горизонтальной оси, напряжение на контакте Rx изменяется. Аналогично, когда он перемещается вдоль вертикальной оси, напряжение на пикселе Ry изменяется. Таким образом, у нас есть четыре направления устройства на двух выходах ADC. Когда палочка перемещается, напряжение на каждом штыре должно быть высоким или низким, в зависимости от направления.

Настройка и отладка

После загрузки кода в аrduino и подключения компонентов в соответствии с электрической схемой, мы теперь управляем светодиодами с помощью джойстика. Можно включить четыре светодиода в каждом направлении в соответствии с движением вала устройства. Он имеет два потенциометра внутри, один – для перемещения по оси X, а другой – для перемещения по оси Y. Каждый потенциометр получает 5v от аrduino. Так как мы перемещаем устройство, значение напряжения изменится, и аналоговое значение в выводах A0 и A1 также станет иным.

Итак, из микроконтроллера аrduino мы считываем аналоговое значение для оси X и Y и включаем светодиоды в соответствии с движением оси устройства. Нажимаем переключатель на модуле и используем для управления одиночным светодиодом в цепи.

Код представлен ниже:

Тестирование

Для тестирования джойстика для ардуино понадобятся следующие компоненты:

  1. Микроконтроллер (любой, совместимый arduino).
  2. Модуль джойстика.
  3. 1 контактный разъем MM.
  4. Макет.
  5. USB-кабель.

Алгоритм тестирования:

  1. Подключите компоненты, используя MM-штырьковый разъем. + 5В подключается к источнику питания 5 В, вывод GND подключен к GND, контакты VRx и VRy подключены к аналоговому входу, контакты и штырьковый разъем подключены к цифровому выводу ввода/вывода.
  2. Номер контакта будет основан по фактическому программному коду.
  3. После аппаратного соединения вставьте образец эскиза в среду разработки аrduino.
  4. Используя USB-кабель, подключите порты от микроконтроллера к компьютеру.
  5. Загрузите программу.
  6. Смотрите результаты на последовательном мониторе.

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

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

Модуль двухосевого джойстик (рис. 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 кОм.