RPi 上的自我/课程

self'/classess on RPi

这是我的一些代码: (主要class)

    import RPi.GPIO as GPIO
    import os
    import pigpio
    import subprocess
    from time import sleep
    GPIO.setmode(GPIO.BCM)
    GPIO.setwarnings(False)
    pigpio.exceptions = False
    pi = pigpio.pi()


    class FORWARD(object):
            def __init__(self):
                    self.GPIO = GPIO
                    self.GPIO_TRIGGER = GPIO_TRIGGER
                    self.GPIO_ECHO = GPIO_ECHO


            def setup():
                    ENGA = 4
                    ENGB = 17
                    ENABLEA = 23
                    ENABLEB = 24
                    GPIO.setup(ENGA, GPIO.OUT)
                    GPIO.setup(ENGB, GPIO.OUT)
                    GPIO.setup(ENABLEA, GPIO.OUT)
                    GPIO.setup(ENABLEB, GPIO.OUT)
                    GPIO_TRIGGER = 14
                    GPIO_ECHO = 11


            def frwd(self):
                    GPIO.setup(GPIO_TRIGGER, GPIO.OUT)
                    GPIO.setup(GPIO_ECHO, GPIO.OUT)
                    GPIO.output(ENABLEB, True)
                    GPIO.output(ENABLEA, True)
                    GPIO.output(ENGA, False)
                    GPIO.output(ENGB, False)

和秒。文件:

    from ctrl import FORWARD
    run = FORWARD()
    run.setup()
    run.frwd()

这是我的问题: 为什么它不起作用?我收到全局名称错误:

    Traceback (most recent call last):
    File "go.py", line 2, in <module>
    run = FORWARD()
    File "/root/ctrl.py", line 22, in __init__
    self.GPIO_TRIGGER = GPIO_TRIGGER
    NameError: global name 'GPIO_TRIGGER' is not defined

我的观点是 - 我只想制作一个 'setup' 函数,我将在其中定义 PINS 和 GPIO 输出,然后我想定义更多方法(例如 - 向后、停止等)。那么这些self是怎么写的呢?

此致, 马切

您应该阅读 class 上的 Python 教程。 https://docs.python.org/2/tutorial/classes.html

class 上每个方法的第一个参数是 class 的一个实例。按照惯例将此变量称为 self。所以你的 setup 方法实际上应该有 self 作为参数。

您收到的具体错误是:

self.GPIO_TRIGGER = GPIO_TRIGGER

您正在尝试将实例的 GPIO_TRIGGER 属性 设置为变量 GPIO_TRIGGER。但是,GPIO_TRIGGER 尚未在 class 定义的范围内定义。即你没有在任何地方定义它,也没有从其他地方导入它。 GPIO_ECHO.

也会有类似的问题

想必你需要自己定义这些变量,例如

GPIO_TRIGGER = 7
GPIO_ECHO = 8

根据您使用的引脚进行相应调整。