用 microbit 驱动 Scroll pHAT

micro:bit编程、教学、展示
STEM
回复
头像
shaoziyang
帖子: 3917
注册时间: 2019年 10月 21日 13:48

用 microbit 驱动 Scroll pHAT

#1

帖子 shaoziyang »

来自:http://www.multiwingspan.co.uk/micro.ph ... phatscroll

Scroll pHat 是树莓派扩展板,由 Pimoroni 公司设计。它有 11x5 LED 阵列,通过 IS31FL3730 驱动,需要使用 I2C 接口。

图片

接线
 Raspberry Pimicro:bit
Power LED5V5V
Power IC3V33V
GroundGNDGND
DataPin 2Pin 20
ClockPin 3Pin 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]

回复

  • 随机主题
    回复总数
    阅读次数
    最新文章