首页 > 解决方案 > 我该如何解决这个问题,树莓派

问题描述

我正在制作一个树莓派项目,我按下一个按钮,距离传感器告诉我我指向传感器的距离。

当我点击按钮时,我得到了距离,然后我得到了这个错误:

Traceback (most recent call last):
  File "/home/pi/Desktop/ButtonTestingWithDistanceSensor.py", line 18, 
in <module>
    input_state = GPIO.input(buttonPin)
RuntimeError: You must setup() the GPIO channel first

这是我的代码:

import RPi.GPIO as GPIO
import time

buttonPin = 17
TRIG = 4
ECHO = 27

GPIO.setmode(GPIO.BCM)

GPIO.setwarnings(False)

GPIO.setup(TRIG, GPIO.OUT)
GPIO.setup(ECHO, GPIO.IN)
GPIO.setup(buttonPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)

while True:
GPIO.setmode(GPIO.BCM)
input_state = GPIO.input(buttonPin)
GPIO.setup(buttonPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
if input_state == False:
    GPIO.output(TRIG, True)
    time.sleep(0.00001)
    GPIO.output(TRIG, False)

    while GPIO.input(ECHO) == False:
        start = time.time()

    while GPIO.input(ECHO) == True:
        end = time.time()

    sig_time = end-start

    #Center Meters

    distance = sig_time / 0.000058 # inches: 0.000148

    print("Distance: {} cm".format(distance))

    GPIO.cleanup()
    time.sleep(0.2)

非常感谢任何帮助,谢谢。

标签: raspberry-pi

解决方案


您的问题的原因是您在 if 条件下运行 GPIO 清理。

GPIO.cleanup()

这会完全停止 GPIO 通道,您必须再次运行设置。

从您的 While 循环中删除这两个语句,代码应该可以按预期工作

1号线

GPIO.setup(buttonPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)

2号线

GPIO.cleanup()

推荐阅读