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
根据您使用的引脚进行相应调整。
这是我的一些代码: (主要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
根据您使用的引脚进行相应调整。