我正在尝试让一个脚本在监视按钮的位置工作,如果操作一次然后打开一些东西。如果再次操作则将其关闭。像一个切换按钮。 我使用以下代码,但这并不好,因为它总是等待按钮边缘触发。因此,while循环中的任何其他代码都不会被执行。如果按钮已被操作,如何检查功能,如果没有,则继续执行其余代码。
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM) # using broadcomm pin numbers
GPIO.setup(21, GPIO.IN, pull_up_down=GPIO.PUD_UP)
prevWater = 0
def buttonControl ():
global prevWater
# take a reading
GPIO.wait_for_edge(21, GPIO.FALLING)
prevWater = not prevWater
return prevWater
while 1:
waterButton = buttonControl ()
if (waterButton == True):
print ("Turn water on")
if (waterButton == False):
print ("Turn water off")
# check what is returned from function
print (waterButton)
# need to do other stuff here
GPIO.cleanup()
非常感谢任何帮助
我尝试过回调,如下所示
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM) # using broadcomm pin numbers
GPIO.setup(21, GPIO.IN, pull_up_down=GPIO.PUD_UP)
prevWater = 0
def my_callback(channel):
global prevWater
print("button pressed")
prevWater = not prevWater
return prevWater
while 1:
GPIO.add_event_detect(21, GPIO.RISING, callback=my_callback)
waterButton = prevWater
if (waterButton == True):
print ("Turn water on")
if (waterButton == False):
print ("Turn water off")
# check what is returned from function
print (waterButton)
# need to do other stuff here
GPIO.cleanup()
但是我收到错误,如下所示
文件“test.py”,第19行,位于GPIO.add_event_detect(21,GPIO.RISING,callback = my_callback)RuntimeError:已为此GPIO通道启用了冲突边缘检测
答案 0 :(得分:0)
了解如何使用回调函数执行此操作,如下所示。当按下按钮时,此脚本可以打开和关闭LED。我现在唯一的问题是,即使添加了去抖时间,开关似乎也会弹跳。我听说开关上的一个小电容可能会阻止这个。我将在本周试一试
{{1}}