我想知道我应该如何为我的MCP23017 (一个I/O扩展芯片)的引脚声明构造我的代码,以及我是否应该将它放入一个函数中。
因此,目前我得到了下面的脚本与我的MCP的引脚声明和许多函数使用它们。这些函数由另一个文件调用,所有这些都是在Raspberry Pi上完成的。
import board
import busio
from digitalio import Direction
from adafruit_mcp230xx.mcp23017 import MCP23017
import time
i2c = busio.I2C(board.SCL, board.SDA)
mcp0 = MCP23017(i2c, address=0x27)
pin00 = mcp0.get_pin(0)
pin00.direction = Direction.OUTPUT
pin01 = mcp0.get_pin(1)
pin01.direction = Direction.OUTPUT
etc
pins = (pin00, pin01, etc)
def relays_off():
i = 0
while i < len(pins):
if not pins[i].value:
pins[i].value = True
i += 1
def other_function():
etc整个项目是关于控制继电器,由这些引脚控制。问题是,每次我打开电源,都会出现一个错误,继电器会被随机激活/停用。错误是[Errno 121] Remote I/O error。我必须执行一堆relays_off()来使它平静下来,直到我没有得到更多的错误,然后它才能正常工作。
所以我首先想知道我是否正确地编码了它,或者引脚声明是否应该在其他函数调用的函数中?
发布于 2022-02-27 20:02:47
为了简洁起见省略了进口..。
把所有的引脚都列在一张单子里怎么样?例如,
NPINS = 5 # or whatever
def initpin(mcp, n):
pin = mcp.get_pin(n)
pin.direction = Direction.OUTPUT
pin.value = True
return pin
mcp0 = MCP23017(i2c, address=0x27)
pinlist = [initpin(mcp0, i) for i in range(NPINS)]随后,您可以通过其各自的索引访问引脚。
不确定这是否有帮助
https://stackoverflow.com/questions/71287911
复制相似问题