以下是我的几个代码: (主要课程)
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输出的功能,然后我想定义更多方法(例如 - 后退,停止等)。那么关于这些自我是什么或者它应该如何写?
此致 马切伊
答案 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
根据您正在使用的引脚进行相应调整。