from machine import Pin, SPI
import time
class Matrix_LED:
# class matrix led
def __init__(self,spi_port, MOSI, CLK, CS,baudrate):
# declarate the secuence of MAX7219
self.decode_MODE=bytes([0x09,0X00]) # no decode for digits 0-7
self.intensity=bytes([0x0A,0X0F]) # max intensity
self.scan_limit=bytes([0X0B,0X07]) # 0-7
self.shutdown=bytes([0X0C,0X01]) # normal operation
self.display_test=bytes([0X0F,0X00]) # normal operation
self.spi_port=spi_port
self.MOSI=MOSI
self.CLK=CLK
self.CS=CS
self.baudrate=baudrate
self.spi=SPI(self.spi_port,self.baudrate,mosi=Pin(self.MOSI),sck=Pin(self.CLK))
self.cs=Pin(self.CS, mode=Pin.OUT, value=1)
def MATRIX_init(self):
# secuence of activation MAX7219
self.MATRIX_WRITE_SPI(self.decode_MODE)
self.MATRIX_WRITE_SPI(self.intensity)
self.MATRIX_WRITE_SPI(self.scan_limit)
self.MATRIX_WRITE_SPI(self.shutdown)
self.MATRIX_WRITE_SPI(self.display_test)
return 0
def MATRIX_WRITE_SPI(self,data):
# write spi com
self.cs(0)
self.spi.write(data)
self.cs(1)
return 0
class figure:
# define a figure class
def __init__(self,bit_map_data,offset_x,offset_y):
# figure atributes
self.width=len(bit_map_data) # number of rows
self.height=len(bit_map_data[0]) # number of col
self.bit_map_data=bit_map_data # bitmap matrix of figure
self.offset_x=offset_x # position x of figure in the matrix led
self.offset_y=offset_y # position y of figure in the matrix led
def OR_matrix(self, matrix_led_objective):
# OR gate matrix
print(self.height) # cambiar
print(self.width) # cambiar
for i in range(self.width):
for j in range(self.height):
matrix_led_objective[i+self.offset_x][j+self.offset_y]=matrix_led_objective[i+self.offset_x][j+self.offset_y] | self.bit_map_data[i][j]
return matrix_led_objective
def mtrx_to_bin(self,matrix_led_objective):
# convert to bin
map_bit_res = []
height=len(matrix_led_objective)
width=len(matrix_led_objective[0])
for i in range(height):
res=0
for j in range(width):
res |= (matrix_led_objective[i][j])<<(width-1-j)
map_bit_res.append(res)
return map_bit_res
fig3=[[1],
]
fig = [ [0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0]
]
fig2 = [0b00000000,
0b00000000,
0b01111000,
0b10000100,
0b01000010,
0b10000100,
0b01111000,
0b00000000
]
figure_send= figure(fig3,1,0)
fig_to_led = figure_send.OR_matrix(fig)
print(fig_to_led)
fig_to_send = figure_send.mtrx_to_bin(fig_to_led)
print(fig_to_send)
# spi_port = 0,MOSI = 3,CLK = 2,CS = 1,baudrate=400000
matrix = Matrix_LED(spi_port=0,MOSI=3, CLK=2, CS=1, baudrate=400000)
matrix.MATRIX_init()
for i in range(len(fig_to_send)):
matrix.MATRIX_WRITE_SPI(bytes([i+1,fig_to_send[i]]))