RPi.GPIO - 使用类时回调不起作用

时间:2014-11-30 23:58:33

标签: python python-3.x raspberry-pi

我有以下课程:

import RPi.GPIO as GPIO

class DistanceSensor2:

    def __init__(self, GPIO_MODE, GPIO_TRIGGER, GPIO_ECHO):

        def set_times(channel):
            print("set_times")

        self.GPIO_TRIGGER = GPIO_TRIGGER
        self.GPIO_ECHO = GPIO_ECHO

        GPIO.setmode(GPIO_MODE)

        GPIO.setup(self.GPIO_ECHO, GPIO.IN)      # Echo

        GPIO.add_event_detect(self.GPIO_ECHO, GPIO.RISING, callback = set_times)

然后,在我的主要.py中我有:

import RPi.GPIO as GPIO
from DistanceSensor2 import *

GPIO_MODE = GPIO.BCM
GPIO_TRIGGER = 18
GPIO_ECHO = 25

test = DistanceSensor2(GPIO_MODE, GPIO_TRIGGER, GPIO_ECHO)

我收到错误:

  Traceback (most recent call last):
  File "PythonHelloWorld.py", line 8, in <module>
  test = DistanceSensor2(GPIO_MODE, GPIO_TRIGGER, GPIO_ECHO)
  File "/home/pi/PythonHelloWorld/PythonHelloWorld/DistanceSensor2.py", line 31, in __init__
  GPIO.add_event_detect(self.GPIO_ECHO, GPIO.RISING, callback = set_times)
  RuntimeError: Failed to add edge detection

当我在主.py中直接使用下面的代码时,它可以正常工作。

import RPi.GPIO as GPIO
import time

GPIO_MODE = GPIO.BCM
GPIO_ECHO = 18

def set_times(channel):
    print("set_times")

GPIO.setmode(GPIO_MODE)

GPIO.setup(GPIO_ECHO, GPIO.IN)      # Echo

GPIO.add_event_detect(GPIO_ECHO, GPIO.RISING, callback = set_times)

while 1:
    print("inside while")
    time.sleep(1)

有人能看出问题所在吗?我已经尝试将set_times()移动到方法外部,它也不起作用。

1 个答案:

答案 0 :(得分:0)

终于看到了错误。我的新代码如下:

我的课程:

import RPi.GPIO as GPIO
import time

class DistanceSensor2:
    def __init__(self, GPIO_MODE, GPIO_TRIGGER, GPIO_ECHO):
        self.GPIO_TRIGGER = GPIO_TRIGGER
        self.GPIO_ECHO = GPIO_ECHO

        GPIO.setmode(GPIO_MODE)

        GPIO.setup(self.GPIO_ECHO, GPIO.IN)      # Echo
        GPIO.add_event_detect(self.GPIO_ECHO, GPIO.RISING, callback = self.set_times)

        GPIO.setup(self.GPIO_TRIGGER, GPIO.OUT, initial = GPIO.LOW )

        while 1:
            print("while")
            time.sleep(1)

    def set_times(self, channel):
        print("channel:", channel)

我的主要.py

import RPi.GPIO as GPIO
from DistanceSensor2 import *
import sys

GPIO_MODE = GPIO.BCM
GPIO_TRIGGER = 24
GPIO_ECHO = 17

try:
    test = DistanceSensor2(GPIO_MODE, GPIO_TRIGGER, GPIO_ECHO)
except KeyboardInterrupt:
    GPIO.cleanup()
    sys.exit