关于RPi的自我&classess

时间:2016-05-18 18:01:29

标签: python class self

以下是我的几个代码: (主要课程)

    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

我的意思是 - 我只是想做一个“设置”。我将定义PINS和GPIO输出的功能,然后我想定义更多方法(例如 - 后退,停止等)。那么关于这些自我是什么或者它应该如何写?

此致 马切伊

1 个答案:

答案 0 :(得分:0)

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

类的每个方法的第一个参数是该类的实例。通常将此变量称为self。因此,您的setup方法应该以{{1​​}}作为参数。

您收到的具体错误是使用以下行:

self

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

大概你需要自己定义这些变量,例如

GPIO_TRIGGER

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