피코보드에서 조이스틱 사용 – 조이스틱 조작으로 OLED 화면에서 커서 이동 시키기와 버튼 응용동작

피코보드에서 조이스틱 사용 – 조이스틱 조작으로  OLED 화면에서 커서 이동 시키기와 버튼 응용동작

라즈베리파이 피코보드에서 조이스틱에 대한 조작 값을 입력받게 되었다면 이를 반영하여 화면 동작 등을 하는 것이 필요하다. 이에 대한 예로써 입력받은 값을 128×64 해상도를 가지는 OELD 화면에서 조이스틱 움직임에 따라 커서가 이동하도록 구현해 보았다.

​

1. 미리 알아야 할 사항 – 조이스틱의 기본 조작 방법

라즈베리파이 피코보드에서 조이스틱과 이를 제어하는 기본적인 방법 방법에 대해서는 이전 글에서 자세히 소개했다. 조이스틱이 마일 처음이라면 다음 글부터 참조하는 게 바람직하다.

​

https://kongyine.com/223194633051

2. 미리 알아야 할 사항 – OLED 모듈의 기본 조작 방법

OLED 모듈 자체에 대한 소개와, 기본적인 동작 방법에 대해서는 이전 글에서 소개한 바 있으며, 다음 링크를 이용하여 참고하기 바란다.

​

https://kongyine.com/223193377274

3. 예제 배선 – OLED와 조이스틱의 조합

본 예제에서는 바로 앞글에서 조이스틱 조작에 사용된 회로에 단순히 I2C 통신을 위해, 다음과 같이 OLED 모듈을 0번과 1번 핀에 추가로 연결했다. GND와 VCC도 각기 연결해 주었다.

​

​

피코 보드에서의 배선을 조금 자세히 보면 다음과 같은데, 3.3V 전원을 양쪽에 모두 Vcc 연결해 준 것 외에 이전 글들에서 사용한 각각의 회로와 동일하다.

​

​

​

코드 역시 위에 소개한 이전 글 2개를 거의 단순히 하나로 합치되, 조이스틱의 버튼스위치가 눌려졌을 때 조금 더 큰 사각형 형태로 되도록, 다음과 같은 부분만 추가해 주었다.

​

if switch ==0:

for k in range(7):

oled.rect(xOLED-k,yOLED-k,(k+1)*2,(k+1)*2,1)

​

​

4. 예제 Code 및 동작

결과적으로 사용한 예제 코드는 다음과 같으며

import machine
from ssd1306 import SSD1306_I2C
import utime
import urandom

WIDTH =128
HEIGHT= 64
sda=machine.Pin(0)
scl=machine.Pin(1)
i2c=machine.I2C(0,scl=scl, sda=sda, freq=200000)

oled = SSD1306_I2C(WIDTH,HEIGHT,i2c)
oled.init_display()

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(" ")
    xOLED = int(xCord/(65535/128))
    yOLED= int(yCord/(65535/64))
print(xOLED, yOLED)
    oled.fill(0)
    oled.rect(xOLED-1,yOLED-1,3,3,1)
if switch ==0:
for k in range(7):
            oled.rect(xOLED-k,yOLED-k,(k+1)*2,(k+1)*2,1)
        
    oled.show()   
    utime.sleep(0.001)

​

​

동작 결과는 다음과 같다.

​