raspberry-pi - 我该如何解决这个问题,树莓派
问题描述
我正在制作一个树莓派项目,我按下一个按钮,距离传感器告诉我我指向传感器的距离。
当我点击按钮时,我得到了距离,然后我得到了这个错误:
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)
非常感谢任何帮助,谢谢。
解决方案
您的问题的原因是您在 if 条件下运行 GPIO 清理。
GPIO.cleanup()
这会完全停止 GPIO 通道,您必须再次运行设置。
从您的 While 循环中删除这两个语句,代码应该可以按预期工作
1号线
GPIO.setup(buttonPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
2号线
GPIO.cleanup()
推荐阅读
- javascript - 如何在简单的 jQuery 幻灯片中隐藏上一张幻灯片?
- geocoding - here.com 地理编码 REST api 的搜索文本中的哪些字符无效?
- ios - 无法与 WhatsApp 或电子邮件共享 PDF 文件(仅限 IOS)
- swift - Swift 和 CSVImporter:仅导入 .csv 的第一行
- macos - 如何使用 productbuild 在 MacOS Mojave pkg 安装程序中设置背景图像?
- c++ - 由于错误,c++ 代码无法在 Visual Studios 上运行,但未显示错误
- graphdb - 使用 preload 或 loadrdf 工具将数据加载到 graphdb 时如何指定“命名图”?
- jquery - 如何获取元素,例如。h1 来自传递给视图的数据
- regex - Powershell Select-String 包含通配符
- java - Spring boot几个线程工作不正常