8 x 8 LED Matrix 1088BS 소자 제어방법 예제 2

8 x 8 LED Matrix 1088BS 소자 제어방법 예제 2

앞선 글에서 1088BS 8×8 LED Matrix 소자에 대해 간단히 소개하고, 핀의 번호부여 및 기본적인 배선 방법을 소개한 바 있다.

​

​

https://kongyine.com/223191771952

​

본 글에서는 이를 이용하여, 라즈베리파이 피코 보드를 이용하여 동작시키는 몇 가지 기본 동작에 대해 소개한다.

​

​

기본적으로 필요한 Library는 다음과 같이 기본 동작에는 기본 라이브러리 정도만 있으면 된다.

​

import machine

import utime

​

​

헤더핀의 연결은 순환문 Loop에서 조작이 용이하도록, 다음과 같이 행과 열로 구분하여, 회로의 번호순으로 나열한 배열을 만들어서 출력핀 모드를 선언했다. 그리고 선언 과정에서 초기값도 0으로 설정했다.

​

배열 내 순서는 각각 위의 핀번호 순서대로 나열했다.

​

수직 방향으로 연결되는 핀들에 대한 배열

pinV=[machine.Pin(9, machine.Pin.OUT),machine.Pin(14, machine.Pin.OUT),machine.Pin(8, machine.Pin.OUT),machine.Pin(12, machine.Pin.OUT),machine.Pin(1, machine.Pin.OUT),machine.Pin(7, machine.Pin.OUT),machine.Pin(2, machine.Pin.OUT),machine.Pin(5, machine.Pin.OUT)]

​

수평방향으로 연결되는 핀들에 대한 배열

pinH=[machine.Pin(13, machine.Pin.OUT),machine.Pin(3, machine.Pin.OUT),machine.Pin(4, machine.Pin.OUT),machine.Pin(10, machine.Pin.OUT),machine.Pin(6, machine.Pin.OUT),machine.Pin(11, machine.Pin.OUT),machine.Pin(15, machine.Pin.OUT),machine.Pin(16, machine.Pin.OUT)]

​

​

이렇게 배열이 선언된 상태에서

​

  1. 첫행부터, 한 줄씩 아래로, 해당 행의 모든 LED를 순차적으로 켯다가 끄는 것은 다음과 같은 방법으로 동작시킬 수 있다.

​

for lines in range(len(pinV)): # 수직 Lines

pinV[lines].value(1)

utime.sleep(0.2)

pinV[lines].value(0)

​

2. 왼쪽 첫 열부터 오른쪽 끝의 열까지 한 줄씩 해당 열위 모든 LED를 순차적으로 켯다가 끄는 것은 다음 Code로 가능한데, 실제 켜고 끄는 것은 두 번째 Loop 내의 Code인데, 미리 수평방향 열에 연결된 핀들에 다음과 같이 미리 High 신호를 주어서 LED를 꺼두어야 한다.

​

for k in range(len(pinV)): # 수평이동 전 초기화

pinH[k].value(1)

pinV[k].value(1)

for cols in range(len(pinH)): # 수평 이동

pinH[cols].value(0)

utime.sleep(0.2)

pinH[cols].value(1)

​

3. 왼쪽 첫 열의 끝 LED (1행, 1열)의 LED부터 오른쪽 아래의 8행 8열 LED까지 대각선 방향으로 순차적으로 LED를 켯다가 끄는 것은 다음과 같이 동작시키면 된다. 실제 켜고 끄는 것은 두 번째 Loop 내의 Code인데, 미리 수평방향 열에 연결된 핀들에 다음과 같이 미리 High 신호를 주어서 LED를 꺼두어야 한다.

​

for lines in range(len(pinV)): # 왼쪽 위에서 오른쪽 아래로

pinH[lines].toggle()

pinV[lines].toggle()

utime.sleep(0.2)

pinH[lines].toggle()

pinV[lines].toggle()

​

4. 반대로 첫행 끝열 LED (1행, 8열)의 LED부터 왼쪽 1열의 가장 아래에 있는 8행의 LED(8행 1열) LED까지 대각선 방향으로 순차적으로 LED를 켯다가 끄는 것은 다음과 같이 동작시키면 된다.

​

for lines in range(len(pinV)):

pinH[7-lines].toggle()

pinV[lines].toggle()

utime.sleep(0.2)

pinH[7-lines].toggle()

pinV[lines].toggle()

5. 첫 번째 LED(1행, 1열)의 LED부터 마지막 LED(8행 8열) LED까지 하나씩 차례대로 LED를 켯다가 끄는 것은 다음과 같이 2중 Loop를 이용하여 동작시키면 된다.

​

for vert in range(len(pinV)):

pinV[vert].toggle()

for lines in range(len(pinH)):

pinH[lines].toggle()

utime.sleep(0.2)

pinH[lines].toggle()

pinV[vert].toggle()

​

​

6. 특정 위치의 LED는 다음과 같이 해당 LED의 배열 순서에 해당되는 LED를 지정해서 양극 쪽에는 high를 음극 쪽에는 low를 만들어주면 해당 위치의 LED가 첫 번째 LED(1행, 1열)의 LED부터 마지막 LED(8행 8열) LED까지 하나씩 차례대로 LED를 켯다가 끄는 것은 다음과 같이 2중 Loop를 이용하여 동작시키면 된다.

​

한 가지 기억할 것은 배열의 번호는 1이 아니라 0부터 시작하는 것을 기억해야 한다.

pinV[0].value(1)

pinV[7].value(1)

pinH[0].value(0)

pinH[7].value(0)

utime.sleep(4)

​

​

그리고, 동작 이후 뒤따라 오는 동작들이 정상적으로 작동하게 하려면, 적절하게 해당 핀들의 신호들을 초기화시키거나, 동작전의 상태로 돌려놓는 것이 필요하다.

​

이들 동작 모두를 모은 Code는 다음과 같다.

import machine
import utime
  
pinV=[machine.Pin(9, machine.Pin.OUT),machine.Pin(14, machine.Pin.OUT),machine.Pin(8, machine.Pin.OUT),machine.Pin(12, machine.Pin.OUT),machine.Pin(1, machine.Pin.OUT),machine.Pin(7, machine.Pin.OUT),machine.Pin(2, machine.Pin.OUT),machine.Pin(5, machine.Pin.OUT)]
pinH=[machine.Pin(13, machine.Pin.OUT),machine.Pin(3, machine.Pin.OUT),machine.Pin(4, machine.Pin.OUT),machine.Pin(10, machine.Pin.OUT),machine.Pin(6, machine.Pin.OUT),machine.Pin(11, machine.Pin.OUT),machine.Pin(15, machine.Pin.OUT),machine.Pin(16, machine.Pin.OUT)]
while True:
for k in range(len(pinV)):
        pinH[k].value(0)
        pinV[k].value(0)
for lines in range(len(pinV)):
        pinV[lines].value(1)
        utime.sleep(0.2)
        pinV[lines].value(0)
for k in range(len(pinV)):
        pinH[k].value(1)
        pinV[k].value(1)
for cols in range(len(pinH)):
        pinH[cols].value(0)
        utime.sleep(0.2)
        pinH[cols].value(1)
for k in range(len(pinV)):
        pinH[k].value(1)
        pinV[k].value(0)
for lines in range(len(pinV)):
        pinH[lines].toggle()
        pinV[lines].toggle()
        utime.sleep(0.2)
        pinH[lines].toggle()
        pinV[lines].toggle()
for lines in range(len(pinV)):
        pinH[7-lines].toggle()
        pinV[lines].toggle()
        utime.sleep(0.2)
        pinH[7-lines].toggle()
        pinV[lines].toggle()
for vert in range(len(pinV)):
        pinV[vert].toggle()
for lines in range(len(pinH)):
            pinH[lines].toggle()
            utime.sleep(0.2)
            pinH[lines].toggle()
        pinV[vert].toggle()
        
    pinV[0].value(1)
    pinV[7].value(1)
    pinH[0].value(0)
    pinH[7].value(0)
    utime.sleep(1)

​