Raspberry Pi 세그먼트 표현 질문입니다!!
조회수 262회
알파뱃 A, C, E, F, H, J, L, O, P, S, U 를 16진수로 표시하면 {0x88, 0xC6, 0x86, 0x8E, 0x89, 0xE1, 0xC7, 0xC0, 0x8C, 0x92, 0xC1}인데 6개의 세그먼트에 6개의 알파뱃이 표시된 후 0.5 초 후에 한 글자씩 왼쪽으로 움직이도록 구현할려고 하는데 현재 코드도 맞는지 모르겠고 추후 방향을 잡을수가 없어 힌트를 얻고자 질문드립니다...
import smbus
import time
PCA9535_OUTPUT = 0
PCA9535_INPUT = 1
FND = [0x88, 0xC6, 0x86, 0x8E, 0x89, 0xE1, 0xC7, 0xC0, 0x8C, 0x92, 0xC1]
_MODE = [0xFF, 0xFF]
_VALUE = [0xFF, 0xFF]
BUS = smbus.SMBus(1)
def pca9535_pin_mode(addr, port, pin, mode):
if (mode == 1):
_MODE[port] |= (1 << pin)
else:
_MODE[port] &= ~(1 << pin)
BUS.write_word_data(addr, (port + 0x06), _MODE[port])
print("pin:{:#010b}".format(port + 0x06),
"mode:{:#010b}".format(_MODE[port]))
def fnd_write(addr, num):
n = [
(num % 1000000) // 100000,
(num % 100000) // 10000,
(num % 10000) // 1000,
(num % 1000) // 100,
(num % 100) // 10,
(num % 10) // 1
]
for i in range(6):
BUS.write_word_data(addr, 0x03, 0x00)
BUS.write_word_data(addr, 0x02, FND[n[i]])
BUS.write_word_data(addr, 0x03, (1 << i))
def main():
addr = 0x21
try:
for i in range(8):
pca9535_pin_mode(addr, 0, i, PCA9535_OUTPUT)
pca9535_pin_mode(addr, 1, i, PCA9535_OUTPUT)
tmp = []
while True:
for i in range(11):
for j in range(0):
BUS.write_word_data(addr, 0x03, 0x00)
BUS.write_word_data(addr, 0x02, FND[j])
BUS.write_word_data(addr, 0x03, 1 << 5)
time.sleep(0.5)
except KeyboardInterrupt:
pass
if __name__ == "__main__":
main()
댓글 입력