在创建通道时,我试图使用将引脚的选择传递给raspberry py,并且在调用该方法时只希望更改.P(值)。因为如果我在另一个类中调用该类,我现在必须以现在的方式再次导入所有库。下面是密码。
import busio
import digitalio
import board
import adafruit_mcp3xxx.mcp3008 as MCP从adafruit_mcp3xxx.analog_in导入AnalogIn
def createChannel(self, channelNumber):
# create the spi bus
spi = busio.SPI(clock=board.SCK, MISO=board.MISO, MOSI=board.MOSI)
# create the cs (chip select)
cs = digitalio.DigitalInOut(board.D22)
# create the mcp object
mcp = MCP.MCP3008(spi, cs)
self.channelNumber = channelNumber
chan = self.channelNumber
chan = AnalogIn(mcp, self.channelNumber)
rawValue = chan.voltage
return rawValue 然后我就叫它
sensor = createChannel()
rawValue = sensor.createChannel(MCP.P0)因此,当我创建另一个类来使用传感器检索的数据并调用函数时,我需要再次导入与MCP一起工作的所有库。我想这样称呼它
sensor = createChannel()
rawValue = sensor.createChannel(P0)但是,我无法通过在调用中传递一个参数来更改最后一部分“MCP.P0”)。
因此,当我创建另一个类时,我必须这样做,并再次导入所有库。
def sensorOne(self):
# create the spi bus
spi = busio.SPI(clock=board.SCK, MISO=board.MISO, MOSI=board.MOSI)
# create the cs (chip select)
cs = digitalio.DigitalInOut(board.D22)
# create the mcp object
mcp = MCP.MCP3008(spi, cs)
#get date and time
outTime = str(datetime.now())
# instance of createSpi class. so if tds sensor is connected to pin 0 you do as below. I will also do ph on pin 2 but comment it out for I am not sure if anyting is connected there yet.
sensor = createChannel()
#get data from sensor on pin 1
outData = sensor.createChannel(MCP.P1)
return outTime, outData如果间距不是100%,请原谅,我看不到,因为我是瞎子,但代码工作只需要尝试并能够将.P0更改为例如,P1传递一个参数给调用。
谢谢
发布于 2021-08-14 09:01:50
我认为您可以在定义P0的模块中将常量P7定义为createChannel,然后其他文件可以从该模块导入这些常量,而不是直接从createChannel获取这些常量。此外,您也可以指定一个整数为0到7的通道。
我在网上找到了一些mcp3xxx.mcp3008。我认为这意味着像MCP.P0和MCP.P1这样的通道名称实际上只是像0和1这样的整数值。
在这个库中,ADC芯片的输入引脚(AKA“channel”)别名为整数变量,其名称以“P”开头(如MCP3008.P0是MCP3008芯片上的0通道)。包含特定ADC芯片的驱动程序类的每个模块具有相应预定义的这些别名。这是为了代码的可读性和防止错误的SPI命令。
您可以通过在定义createChannel方法的模块中定义常量P0、P1等,使P1方法的用户可以使用通道名称。
## File createChannel.py
import adafruit_mcp3xxx.mcp3008 as MCP
# Alias the channel constants for convenience.
P0 = MCP.P0
P1 = MCP.P1
# etc.
P7 = MCP.P7
class createChannel():
def createChannel(self, channelNumber):
# ... Do stuff with channelNumber.
return channelNumber # Or whatever you need to return.在另一个希望使用createChannel的文件中,您可以导入通道常量和方法。或者,我认为您可以通过从0到7指定一个整数来访问一个通道。
## Another file.
from createChannel import createChannel, P0, P1, P7
sensor = createChannel()
# Access a single pin.
rawValue = sensor.createChannel(P0)
# Access each pin.
rawBus = [sensor.createChannel(pin) for pin in range(8)]https://stackoverflow.com/questions/68751973
复制相似问题