1. Joystick
누구나 오락실에서 경험했을 것이라 여겨지듯이, 게임 등을 하거나, 화면상에서 미세하게 커서의 위치를 조절해야 할 때 유용하게 사용되는 것이 조이스틱(JOYSTICK)인데, 라즈베리파이 피코 보드에서도 이러한 조이스틱을 간단하게 제어할 수 있고, 조이스틱의 조작 결과를 화면상에 구현할 수 있다.
마침 책상 서랍 속에 수년 전에 구입해 두었던 조이스틱 모듈이 굴러다니고 있어, 이를 꺼내어 피코 보드에 연결해 보았다.
조이스틱 모듈은 크기가 대략 3.5 x 2.5cm인 모듈로 다음과 같이 5개의 핀을 가지며, 아날로그 값으로 x축과 y 축 방향의 값을 제공하며, 가운데 버튼스위치가 내장되어 있는 구조이다.
2. 핀 연결
피코 보드와의 핀 연결은 비교적 간단해서, x축과 y 축 신호를 각기 Analog 입력 신호채널에 연결해 주고, 버튼스위치는 디지털 입력을 받으면 된다. 그리고 VCC와 GND를 각기 3.3V와 GND에 연결해 주면 배선은 끝난다.
배선 후 전체 모습은 다음과 같고,
피코 보드 부분에서 아날로그 핀은 각기 아날로그 입력 채널 0과 1인 GP26, GP27을 이용했고, 버튼스위치는 디지털 입력으로 GP22에 연결했다.
3. Coding 방법
코딩 시 조이스틱 자체를 위한 별도의 라이브러리는 필요하지 않다. 기본 라이브러리만 다음과 같이 선언해 주면 된다.
import machine
import utime
위에서 배선한 대로, 다음과 같이 핀 사용을 선언해 준다.
moveX = machine.ADC(26)
moveY = machine.ADC(27)
button = machine.Pin(22,machine.Pin.IN, machine.Pin.PULL_UP)
실제로 좌표를 읽는 명령은 다음 동작으로 이루어지며, 읽어진 좌표값은 0~65535의 아날로그 값이므로, 자신이 원하는 적절한 좌표계료 환산하여 사용하면 된다.
while True:
xCord = moveX.read_u16()
yCord = moveY.read_u16()
switch = button.value()
버튼이 눌려졌는지에 따른 동작은 위에서 읽혀진 버튼 값을 기준값과 if 문으로 비교한 후 조건에 해당되는 동작을 하면 된다.
if switch == 0:
print(“Push button pressed!”)
4. 동작 예제
이러한 내용을 종합하여 만든 간단한 예제는 다음과 같다.
import machine
import utime
moveX = machine.ADC(26)
moveY = machine.ADC(27)
button = machine.Pin(22,machine.Pin.IN, machine.Pin.PULL_UP)
while True:
xCord = moveX.read_u16()
yCord = moveY.read_u16()
switch = button.value()
print("X: " + str(xCord) + ", Y: " + str(yCord) + ", Switch " + str(switch))
if switch == 0:
print("Push button pressed!")
print(" ")
utime.sleep(0.5)동작 결과는 우선 화면에 좌표 입력값으로 표시하였는데, 결과는 다음과 같다.


