首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python3如何通过传递参数来更改.P0以调用

python3如何通过传递参数来更改.P0以调用
EN

Stack Overflow用户
提问于 2021-08-12 05:22:14
回答 1查看 58关注 0票数 1

在创建通道时,我试图使用将引脚的选择传递给raspberry py,并且在调用该方法时只希望更改.P(值)。因为如果我在另一个类中调用该类,我现在必须以现在的方式再次导入所有库。下面是密码。

代码语言:javascript
复制
import busio
import digitalio
import board
import adafruit_mcp3xxx.mcp3008 as MCP

从adafruit_mcp3xxx.analog_in导入AnalogIn

代码语言:javascript
复制
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 

然后我就叫它

代码语言:javascript
复制
sensor = createChannel()
rawValue = sensor.createChannel(MCP.P0)

因此,当我创建另一个类来使用传感器检索的数据并调用函数时,我需要再次导入与MCP一起工作的所有库。我想这样称呼它

代码语言:javascript
复制
sensor = createChannel()
rawValue = sensor.createChannel(P0)

但是,我无法通过在调用中传递一个参数来更改最后一部分“MCP.P0”)。

因此,当我创建另一个类时,我必须这样做,并再次导入所有库。

代码语言:javascript
复制
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传递一个参数给调用。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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方法的模块中定义常量P0P1等,使P1方法的用户可以使用通道名称。

代码语言:javascript
复制
## 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指定一个整数来访问一个通道。

代码语言:javascript
复制
## 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)]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68751973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档