Как использовать джойстик Arduino v2.4
В этом уроке мы рассмотрим, как использовать Arduino Joystick Shield. Существуют разные версии, но мы будем использовать v2.4, в котором есть интересные функции и некоторые дополнительные кнопки, которые могут использоваться в вашем приложении по-разному.

В Arduino Joystick Shield v2.4 предусмотрены семь кратковременных кнопочных переключателей (шесть отдельных кнопок и кнопка под джойстиком) и большой джойстик с двумя потенциометрами. Этот щит дает вашему Arduino функциональность, найденную на старых контроллерах Nintendo. Джойстик можно использовать для управления выходами, такими как мелодия или пиксели на экране. Кнопки могут использоваться для навигации или управления игрой.
Примечание. Стандартная плата Arduino не поддерживает экран джойстика с дисплеем Nokia 5110. Это связано с тем, что стандартный источник питания Arduino 3, 3 В способен подавать только 50 мА, а подсветка Nokia 5110 требует больше тока.
Эксперимент 1: Чтение значений джойстика
Джойстик имеет два потенциометра, которые вы подключаете к аналоговым контактам A0 и A1 на вашем Arduino. Значение A0 соответствует позиции X. Значение A1 соответствует позиции Y. Чтобы прочитать эти аналоговые значения, используйте функцию AnalogRead ().
аппаратные средства
1 x Arduino Uno
1 x Arduino Joystick Shield v2.4
шаги:
- Прикрепите защитный щиток к доске Arduino.
- Подключите плату arduino к компьютеру.
- Светодиод загорится на вашем джойстике, показывая, что он работает правильно.
- Напишите эскиз и скомпилируйте его перед загрузкой на свою доску; это хорошая практика, чтобы скомпилировать ваш эскиз перед загрузкой.
- После загрузки эскиза запустите последовательный монитор для наблюдения за значениями.
- Переместите джойстик в разных направлениях, и вы заметите, что значения на серийном мониторе изменятся.
Вы можете перемещать джойстик в 8 направлениях: вверх, вверх, вправо, вправо, вниз, вниз-влево, влево, влево. Если значения изменяются на вашем последовательном мониторе, ваш экран работает правильно.
Этот код отобразит что-то вроде этого, если экран подключен к 5 В.

Код
// define global variables for analog pins. // X values will be read from pin 0 and Y from pin 1 #define PIN_ANALOG_X 0 #define PIN_ANALOG_Y 1 void setup() { // Start serial because we will observe values at serial monitor Serial.begin(9600); } void loop() { // Print x axis values Serial.print("x: "); Serial.println(analogRead(PIN_ANALOG_X)); // Print y axis values Serial.print("y: "); Serial.println(analogRead(PIN_ANALOG_Y)); // Some delay to clearly observe your values on serial monitor. delay(500); }
Скачать код
Эксперимент 2: Использование джойстика для управления движением
Чтобы управлять движением вдоль оси X, сначала нужно прочитать положение потенциометра оси X и определить, нажимает ли пользователь элемент управления вправо или влево или вообще не нажимает его. Если не нажимать ни направо, ни налево, значение A0 обычно равно 523. Чтобы учесть некоторые различия в этом чтении между различными экранами, мы установим допустимое отклонение 30. Это означает, что когда мы читаем значение от 493 до 553, мы будем предполагать, что пользователь не нажимает джойстик. Показание менее 493 будет означать, что пользователь нажимает джойстик влево и хочет, чтобы объект контролировался для перемещения влево. Чтение более 553 означает, что пользователь нажимает джойстик вправо и хочет, чтобы объект контролировался для перемещения вправо.
Этот код отобразит что-то вроде этого:

меры
- Прикрепите свой щит к руке.
- Подключите плату arduino к компьютеру.
- Led включится, на вашем щитке джойстика, показывая, что он работает правильно.
- Напишите эскиз и скомпилируйте его перед загрузкой на свою доску, это просто хорошая практика для составления вашего эскиза перед загрузкой.
- После загрузки эскиза выполните серийный монитор для наблюдения за значениями.
- Когда вы перемещаете джойстик, последовательный монитор скажет вам направление, в котором вы перемещаете свой джойстик.
В приведенном ниже коде указывается направление, которое пользователь нажимает на джойстик вместо отображения аналоговых значений.
Код
// define global variables for analog pins. // X values will be read from pin 0 and Y from pin 1 #define PIN_ANALOG_X 0 #define PIN_ANALOG_Y 1 void setup() { // Start serial because we will observe values at serial monitor Serial.begin(9600); } void loop() { // Print x axis values Serial.print("x: "); Serial.println(analogRead(PIN_ANALOG_X)); // Print y axis values Serial.print("y: "); Serial.println(analogRead(PIN_ANALOG_Y)); // Some delay to clearly observe your values on serial monitor. delay(500); }
Скачать код
Эксперимент 3: Прочтите кнопочные переключатели джойстика
Кнопочные переключатели просто подключены к цифровым выводам ввода / вывода Arduino, как показано в таблице ниже:

При нажатии клавиши A цифровой сигнал будет отправлен на D2 и так далее. Мы будем использовать функцию digitalRead () для определения состояния кнопок.
Поскольку на этих кнопках на щитке джойстика нет резисторов, вам необходимо включить резисторы на вашем Arduino. Ниже приведен код для включения подтягивающих резисторов и чтения цифровых значений.
Всякий раз, когда пользователь нажимает кнопку, Arduino отображает значение кнопки на последовательном мониторе.

меры
- Прикрепите щит джойстика к доске arduino.
- Подключите плату arduino к компьютеру.
- Светодиод загорится на вашем джойстике, показывая, что он работает правильно.
- Напишите эскиз и скомпилируйте его перед загрузкой на свою доску (лучше всего составить свой эскиз перед загрузкой).
- После загрузки эскиза запустите серийный монитор для наблюдения за значениями.
- Нажмите любую кнопку на джойстике, и она отобразит, какая кнопка нажата.
Код
#define BUTTON_UP 2 #define BUTTON_RIGHT 3 #define BUTTON_DOWN 4 #define BUTTON_LEFT 5 #define BUTTON_E 6 #define BUTTON_F 7 #define DELAY 500 void setup() { Serial.begin(9600); // to enable pull up resistors first write pin mode // and then make that pin HIGH pinMode(BUTTON_UP, INPUT); digitalWrite(BUTTON_UP, HIGH); pinMode(BUTTON_RIGHT, INPUT); digitalWrite(BUTTON_RIGHT, HIGH); pinMode(BUTTON_DOWN, INPUT); digitalWrite(BUTTON_DOWN, HIGH); pinMode(BUTTON_LEFT, INPUT); digitalWrite(BUTTON_LEFT, HIGH); pinMode(BUTTON_E, INPUT); digitalWrite(BUTTON_E, HIGH); pinMode(BUTTON_F, INPUT); digitalWrite(BUTTON_F, HIGH); } void loop() { if(digitalRead(BUTTON_UP) == LOW) { Serial.println("Button A is pressed"); delay(DELAY); } else if(digitalRead(BUTTON_RIGHT) == LOW) { Serial.println("Button B is pressed"); delay(DELAY); } else if(digitalRead(BUTTON_DOWN) == LOW) { Serial.println("Button C is pressed"); delay(DELAY); } else if(digitalRead(BUTTON_LEFT) == LOW) { Serial.println("Button D is pressed"); delay(DELAY); } else if(digitalRead(BUTTON_E) == LOW) { Serial.println("Button E is pressed"); delay(DELAY); } else if(digitalRead(BUTTON_F) == LOW) { Serial.println("Button F is pressed"); delay(DELAY); } }
Скачать код
Попробуйте этот проект сами! Получить спецификацию.