12. 조이스틱 part1
유투브 : https://youtu.be/nGEXff3xEUM
안녕하세요 반갑습니다. 이번 시간에는 조이스틱을
공부해보겠습니다. 네이버 쇼핑에서 조이스틱을
검색한 결과입니다.
상황에 맞게 골라서 쓰시면 됩니다.
조이스틱 : https://url.kr/yuhcji
쇼핑 결과에서 검은색 조이스틱 단품을 선택하시면 됩니다.
조이스틱은 상하 좌우 그리고 눌렀을 때 딸깍하고 소리가 나는
3축 움직임을 보입니다.
조이스틱을 쓰려면 몇가지 세팅이 필요한데요
일단 아두이노 연결부터 보겠습니다.
GND = gnd
+5V = 5v
VRx = A0핀(X좌표)
VRy = A1핀(Y좌표)
SW = 13번핀(조이스틱을 눌렀을때 Z값)
연결이 완료 되었으면 아두이노 소프트웨어창을 열고 아래 코드를 입력합니다.
#include <SoftwareSerial.h>
void setup()
{
Serial.begin(9600);
pinMode(13, INPUT_PULLUP);
}
void loop()
{
Serial.print("x좌표 : ");
Serial.print(analogRead(A0)); //X좌표
Serial.print(" ");
Serial.print("y좌표 : ");
Serial.print(analogRead(A1)); //Y좌표
Serial.print(" ");
Serial.print("z값 : ");
Serial.println(digitalRead(13)); // Z축 눌렸는지 확인
delay(100);
}
A0핀에 X좌표를 읽고
A1핀에 Y좌표를 읽고
디지털 13번 핀으로 Z축 값을 읽고
시리얼 모니터로 출력하는 코드입니다.
아래는 시리얼 모니터 출력 결과입니다.
값은 읽어서 왔는데 지금부터 중요한 세팅 2가지를 끝내야
조이스틱을 완전하게 사용할 수 있습니다.

먼저 조이스틱 좌표계 고정입니다. 조이스틱의 핀을 왼쪽으로 눕히면
가로축이 x좌표계, 세로축이 y좌표계로 설정됩니다.
가로축의 왼쪽으로 갈 수록 X값이 작아져서 끝으로 가면 0
오른쪽으로 누르면 1023이 출력됩니다.
Y좌표는 위로 올리면 0, 아래로 내리면 1023
조이스틱의 위치를 잡아놓고 X, Y좌표의 증가 방향을
꼭 기억하셔야 합니다.
그 다음은 Z축 인데요. Z축 설정은 조금 더 복잡합니다.
일단 Z값은 X, Y값과 다르게 디지털 핀으로 입력을 받습니다.
setup함수의 아래 코드를 보시면 pinMode(13, INPUT_PULLUP);
지금까지는 디지털 핀을 OUTPUT으로만
사용해서 전류가 나가는 핀으로만 사용했는데
지금은 조이스틱으로 부터 신호를 받아야 하니
INPUT으로 사용하고 있습니다.
그런데 OUTPUT처럼 그냥 INPUT이 아니고
뒤에 PULLUP이라는 말이 붙어 있습니다.
왜 그럴까요?
그 이유는 아두이노에서는 디지털핀으로 신호를 받을 때
플로팅 현상이 발생하기 때문입니다.
플로팅이란?
외부에서 신호가 없을 때
0 혹은 1이 랜덤으로 출력되는 현상
입니다.
즉, 조이스틱을 조작하지 않을 때
출력 값이 0이나 1로 고정된게 아니고
0이 출력 될 때도 있고 1이 출력 될 때도
있습니다. 이러면 조이스틱이 눌렸는지
안 눌렸는지 판단이 어렵겠죠?
조이스틱은 전혀 건드리지 않았는데
Z값을 보면 0이 계속 나오지만 중간 중간에 갑자기 1이 나오는
경우가 발생합니다. 게다가
pinMode(13, INPUT_PULLUP); 이 코드를
pinMode(13, INPUT); 이렇게 쓰면 작동자체가 안되는 경우도 생깁니다.
X, Y는 정상적으로 작동하는데 조이스틱을 아무리 눌러도
Z값은 변화가 없습니다.
따라서 Z값을 디지털 핀으로 받기 위해서는 핀모드를
pinMode(13, INPUT_PULLUP);
이렇게 해주셔야 합니다. pullup이란
아무것도 누르지 않을 때 0과 1이 나오니
이 숫자를 업해서 1이 나오도록 하라는 뜻입니다.
그럼 조이스틱을 누르지 않을 때 1 누르면 0이 출력되겠죠?
눈치가 빠르신 분은 아시겠지만 PULLDOWN모드도 있습니다.
UP이 DOWN보다 안정성이 높다는 이유로 보통은 PULLUP모드를 사용합니다.
조이스틱 사용시 2가지 주의사항을 살펴봤는데요
다음 장에서 기본 미션을 하나 공부하도록 하겠습니다.
