我正在尝试使用超锁(“Turbo”模式)Raspberry Pi 和两个 MCP23017 i2c 端口扩展器来复用 63 个 RGB LED 阵列。我遇到的问题是 LED 闪烁很多。
每个 LED 基本上是三个 LED 合二为一,共阳极。因此,我将它们视为单独的 LED。因此,我实际上在 14x14 矩阵中有 189 个 LED,而不是 63 个 LED。它由以下人员创建:
pin_array=[[0]*14 for i in range(14)]
然后,矩阵中的每个条目都填充有 1 表示 LED 应该打开,或者 0 表示应该关闭。要循环打开/关闭每个 LED,我使用以下代码:
#Example continous loop
while (1==1):
#Cycle through pins and turn on/off appropriate LEDs
for row_index, row in enumerate(pin_array):
#Power on row
mcp1.output(row_index,1) #for mcp1 a value of 1 is On
for col_index, column in enumerate(row):
#If the value is 1 turn on the LED then turn it off
if column==1:
mcp2.output(col_index,0) #for mcp2 a value of 0 is On
mcp2.output(col_index,1)
#Power off row
mcp1.output(row_index,0)
有什么方法可以改进/优化上面的代码,让它运行得更快,这样闪烁就消失了?
更新:我尝试使用 zero.zero.seven、user2357112 和 kindall 给出的一些优化和建议,结果如下:
last_row=13
last_col=13
while 1:
row=0
#Cycle through pins and turn on/off appropriate LEDs
while row<14:
col=0
#Power on row
mcp1.output(row,1) #for mcp1 a value of 1 is On
while col<14:
if pin_array[row][col]==1:
mcp2.output(last_col,1) #for mcp2 a value of 0 is On
mcp2.output(col,0)
last_row=row
last_col=col
col+=1
mcp1.output(row,0)
row+=1
我必须判断闪烁的唯一方法是悲伤地用眼睛。在我看来,随着优化和激活计划的变化,闪烁没有任何明显的变化。