Главная » Ардуино » 2 примера применение аналогового джойстика с Ардуино

2 примера применение аналогового джойстика с Ардуино

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

Блок питания 0...30 В / 3A
Набор для сборки регулируемого блока питания...
Подробнее

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

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

Принципиальная схема аналогового джойстика:

Принципиальная схема аналогового джойстика

Джойстик – подключение к Ардуино

Джойстик – подключение к Ардуино

На самом деле подключить джойстик к Ардуино очень просто. Для этого соответствующим образом помеченные контакты (+, — или + 5V, GND) подключите к источнику питания, а остальные (оси X и Y джойстика) в соответствии с маркировкой к 2 аналоговым каналам Ардуино и сигнал от кнопки к любому контакту Ардуино.

Джойстик для Arduino
Двухосевой XY джойстик для Arduino, напряжение на....
Подробнее

В нашем случае мы подключим джойстик так:

  • ось X — вывод A0
  • ось Y — вывод A1
  • кнопка — вывод 2

Первую программу для чтения данных, вероятно, может написать любой новичок:

void setup()  
{  
  Serial.begin(9600);//устанавливаем последовательный порт для связи с компьютером
    
  pinMode(2, INPUT);//устанавливаем контакт 2 как вход для кнопки и включаем подтягивание
  digitalWrite(2, HIGH); 
 /устанавливаем контакты A0 и A1 в качестве входов - подключаем оси X и Y джойстика соответственно
  pinMode(A0, INPUT);/
  pinMode(A1, INPUT);  
}    
  
void loop()  
{  
  int x=analogRead(A0);//считываем значения напряжения по осям X и Y 
  int y=analogRead(A1);  
  Serial.print(x);//выводим в монитор последовательного порта 
  Serial.print(" ");  
  Serial.print(y);  
  Serial.print(" ");  
  Serial.println(digitalRead(2));//кнопка
}

Вторая программа немного сложнее и учитывает тот факт, что считывание джойстика в нейтральном положении может быть нестабильным, и что мы не обязательно хотим использовать около 500 состояний джойстика при отклонении в каждую сторону:

// мой АЦП возвращает 514 и 504 для центрального местоположения
const int x_mid=514;  
const int y_mid=504;  
// устанавливаем гистерезис - только после превышения этого значения от центра будем что-то делать
const int center_hist=5;  
  
void setup()  
{  
  Serial.begin(9600);// устанавливаем последовательный порт для связи с компьютером
    
  pinMode(2, INPUT);// устанавливаем контакт 2 как вход кнопки и включаем подтягивание 
  digitalWrite(2, HIGH);   
  pinMode(A0, INPUT);// устанавливаем контакты A0 и A1 как входы - мы подключим к ним оси X и Y джойстика соответственно 
  pinMode(A1, INPUT);  
}  
  
  
void loop()  
{  
  int x=analogRead(A0);// считываем значения напряжения по осям X и Y
  int y=analogRead(A1);  
    
  if(x>(x_mid+center_hist)||x<(x_mid-center_hist)){// если джойстик наклонен за пределы нейтрального положения
    x=(x-x_mid)/16;// вычисляем его позицию и уменьшаем количество возможных состояний (512/16 = 32)  
    // обратите внимание - из-за деления в C мы получим асимметричный диапазон - если это нас беспокоит, мы можем использовать оператор if для обрезки асимметричного значения)   
  }else x=0;  
    
  if(y>(y_mid+center_hist)||y<(y_mid-center_hist)){// то же самое для оси Y 
    y=(y-y_mid)/16;  
  }else y=0;  
    
  Serial.print(x);// отображаем их 
  Serial.print(" ");  
  Serial.print(y);  
  Serial.print(" ");  
  Serial.println(digitalRead(2)); 
}  

Надеемся, что эти несколько строк вдохновят вас на создание множества интересных устройств (например, дистанционно управляемых). Конечно же, ничто не мешает использовать такой джойстик не только с Ардуино.

Цифровой мультиметр AN8009
Большой ЖК-дисплей с подсветкой, 9999 отсчетов, измерение TrueRMS...
Подробнее

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

Ваш email нигде не будет показан. Обязательные для заполнения поля помечены *

*