Python GPIO功能输入按钮在下降沿切换

时间:2016-02-05 13:53:01

标签: python raspberry-pi gpio

我正在尝试让一个脚本在监视按钮的位置工作,如果操作一次然后打开一些东西。如果再次操作则将其关闭。像一个切换按钮。 我使用以下代码,但这并不好,因为它总是等待按钮边缘触发。因此,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通道启用了冲突边缘检测

1 个答案:

答案 0 :(得分:0)

了解如何使用回调函数执行此操作,如下所示。当按下按钮时,此脚本可以打开和关闭LED。我现在唯一的问题是,即使添加了去抖时间,开关似乎也会弹跳。我听说开关上的一个小电容可能会阻止这个。我将在本周试一试

{{1}}