Scroll pHat 是树莓派扩展板,由 Pimoroni 公司设计。它有 11x5 LED 阵列,通过 IS31FL3730 驱动,需要使用 I2C 接口。
接线
Raspberry Pi | micro:bit | |
---|---|---|
Power LED | 5V | 5V |
Power IC | 3V3 | 3V |
Ground | GND | GND |
Data | Pin 2 | Pin 20 |
Clock | Pin 3 | Pin 19 |
基本驱动
代码: 全选
from microbit import *
class ScrollP:
font = [0x0,0x17,0xc03,0x2bea,0x6a76,0x2889,0x6aaa,0x3,0x45c0,0x1d1,0xc6,
0x11c4,0x38c,0x1084,0x10,0xc98,0x7e3f,0x3e2,0x5ebd,0x7eb5,0x790f,
0x76b7,0x76bf,0x7c21,0x7ebf,0x7eb7,0x140,0x340,0x4544,0x294a,0x1151,
0x1ea0,0x5ebf,0x7cbf,0x6ebf,0x463f,0x3a3f,0x56bf,0x4bf,0x763f,0x7c9f,
0x47f1,0x3e08,0x6c9f,0x421f,0x7cdf,0x709c,0x7e3f,0x1cbf,0x7b2e,0x6cbf,
0x76b7,0x7e1,0x7e1f,0x3e0f,0x7d9f,0x6c9b,0x7e97,0x4eb9,0x47e0,0x6083,
0x3f1,0x1826,0x4210,0x821,0x7298,0x729f,0x529c,0x7e9c,0x534c,0x17c4,
0x7ab7,0x709f,0x3a0,0x3608,0x699f,0x3e0,0x6198,0x6098,0x7a5e,0x1cbf,
0x7ca7,0x109e,0x26b2,0xbe2,0x721c,0x320c,0x330c,0x5114,0x1b16,0x4384]
def __init__(self):
self.ADDRESS = 0x60
self.buffer = bytearray([0] * 11)
self.offset = 0
# set 5x11 mode
self.write_reg(0,0x03)
self.set_brightness(32)
self.show()
def write_reg(self,reg,value):
i2c.write(self.ADDRESS, bytes([reg,value]), repeat=False)
def set_pixel(self, x,y,value):
if value==1:
self.buffer[x] |= (1 << y)
else:
self.buffer[x] &= ~(1 << y)
def set_brightness(self,b):
self.write_reg(0x19,b)
def show(self):
data = bytearray([0x01]) + self.buffer + bytearray([0xff])
i2c.write(self.ADDRESS,data,repeat=False)
def set_char(self, char, col):
char3 = self.get_char_bytes(char)
for i in range(3):
if i+col<=10 and i+col>=0:
self.buffer[i+col] = char3
[i]
def get_char_bytes(self,c):
if ord(c)<32 or ord(c)>122:
return [0,0,0]
else:
return [(self.font[ord(c)-32]>>(i*5)) & 31 for i in range(3)]
def scroll_msg(self, msg, speed):
self.clear()
self.show()
col = 10
i = 0
msg+= " "
while i< len(msg)-3:
while col > -5:
self.set_char(msg[i],col)
if col<8:
self.buffer[col+3]=0
self.set_char(msg[i+1],col+4)
if col<4:
self.buffer[col+7]=0
self.set_char(msg[i+2],col+8)
if col<0:
self.buffer[col+11]=0
self.set_char(msg[i+3],col+12)
self.show()
sleep(speed)
col -= 1
col = 0
i += 1
def clear(self):
self.buffer = bytearray([0] * 11)[/i][/i]
代码: 全选
# make an instance
sp = ScrollP()
# define a list of the full character set
charset = "".join([chr(i) for i in range(32,123)])
while True:
# set the pixels on one by one using the set_pixel method
for row in range(5):
for col in range(11):
sp.set_pixel(col, row, 1)
# update the display for changes to be seen
sp.show()
sleep(100)
# fade out
for b in range(255,-1,-5):
sp.set_brightness(b)
sp.show()
sleep(20)
sleep(500)
sp.clear()
sp.show()
sp.set_brightness(32)
# set the columns by writing to the buffer
for i in range(11):
sp.buffer[i] = 31
sp.show()
sleep(250)
# clear the screen
sp.clear()
sp.show()
sleep(500)
# set the rows by writing to the buffer
for r in range(5):
for i in range(11):
sp.buffer[i] |= 1<<r
sp.show()
sleep(250)
sp.clear()
sp.show()
sleep(500)
# scroll some messages
sp.scroll_msg("Bazinga! Let your micro:bit talk back.",50)
sp.scroll_msg(charset,50)[/i][/i]
[/i][/i]