본문 바로가기

메이킹/아두이노

조이스틱 활용하기(LED 제어하기)

반응형

 

조이스틱 모듈은 방향키를 담당하는 것으로 보통 게임을 할 때 컴퓨터 커서의 방향을 쉽게 움직이기 위한 포인팅 장치로 사용됩니다. 사물을 이동시키는 입력장치로 사용 가능하며, 3개의 축(X,Y,Z)으로 이루어져 있습니다.

조이스틱 모듈에는 VCC, GND, VRX, VRY, SW 총 5개의 핀이 있으며 두 개의 축만 사용할 때는 VRX, VRY를 아날로그 핀에 연결하고, SW를 디지털 핀에 연결해 스위치로 사용하면 됩니다.

 

하지만 X, Y, Z 세 개의 축을 모두 사용할 때는 VRX, VRY, SW를 모두 아날로그 핀에 연결합니다.

 

여기서는 두개의 축만 사용하기 때문에 VRX, VRY를 아날로그 핀에 연결하고, SW를 디지털 핀에 연결해 스위치로 사용하겠습니다.

조이스틱 연결하기

 

1) 조이스틱의 좌표값 찾기

const int AXIS_X = A0;
const int AXIS_Y = A1;
const int SW_P = 2; 
 
void setup() {
  Serial.begin(9600);
  pinMode(SW_P,INPUT_PULLUP);
}
 
void loop() {

  Serial.print("Axis_X: ");
  Serial.println(analogRead(AXIS_X));

  Serial.print("Axis_Y: ");
  Serial.println(analogRead(AXIS_Y));

  Serial.print("SW_P:  ");
  Serial.println(digitalRead(SW_P));

  delay(500);
}

 

-결과

 

Axis_X, Axis_Y 값은 0~1023의 아날로그 값을 가집니다. 이론상으로 조이스틱의 중심값은 (X, Y)은 (512, 512)가 됩니다.

출처 :https://scipia.co.kr/blog/243

 

 


 

2) 조이스틱으로 LED 제어하기

 

 

#define joyX A0
#define joyY A1

int SW_pin = 2;
int swState = 0;
int swState1 = 0;

void setup() {
  pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(11,OUTPUT);
  pinMode(12,OUTPUT);
  pinMode(SW_pin,INPUT);
  digitalWrite(SW_pin, HIGH);
  Serial.begin(9600);
}
 
void loop() {
 int xValue = analogRead(joyX);
 int yValue = analogRead(joyY);
  Serial.print("X-axis: ");
  Serial.print(xValue);
  Serial.print("\t");
  Serial.print("Y-axis: ");
  Serial.println(yValue);
  
  swState = digitalRead(SW_pin);
  Serial.println(swState);
  if (xValue>=1000)
    digitalWrite(12, HIGH);
  else
    digitalWrite(12, LOW);

  if (xValue<25)
    digitalWrite(11, HIGH);
  else
    digitalWrite(11, LOW);

  if (yValue>=1000)
    digitalWrite(10, HIGH);
  else
    digitalWrite(10, LOW);

  if (yValue<25)
    digitalWrite(9, HIGH);
  else
    digitalWrite(9, LOW);

  if (swState == LOW)
  {
    Serial.println("Switch = High");
    digitalWrite(8, HIGH);
  }
  else
    digitalWrite(8, LOW);
    
  swState1 = digitalRead(8);
  Serial.println(swState1);
  delay(50);
}

 

결과

 

 

 

 

 

 

반응형