原创 AoboSir 最后发布于2017-03-08 04:48:58 阅读数 6157

已收藏

发布于2017-03-08 04:48:58

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原博文链接在我的官方网站,网址是:http://www.aobosir.com/blog/2017/03/08/raspberrypi-GPIO-interrupted-key-control-led/


我的树莓派型号:Raspberry Pi 2 Model B V1.1
装机系统:NOOBS v1.9.2


  1. import RPi.GPIO as GPIO
  2. import time
  3. GPIO.setmode(GPIO.BCM)
  4. GPIO.setup(24, GPIO.IN, pull_up_dwon=GPIO.PUD_DOWN)
  5. GPIO.setup(25, GPIO.OUT)
  6. ledStatus = True
  7. def my_callback(channel):
  8. print("button pressed!")
  9. global ledStatus
  10. ledStatus = not ledStatus
  11. if ledStatus:
  12. GPIO.output(25, GPIO.HIGH)
  13. pass
  14. else:
  15. GPIO.output(25, GPIO.LOW)
  16. pass
  17. pass
  18. GPIO.add_event_detect(24, GPIO.RISING, callback=my_callback)
  19. while True:
  20. try:
  21. print("I'm working...")
  22. time.sleep(5)
  23. pass
  24. except KeyboardInterrupt:
  25. break
  26. pass
  27. pass
  28. GPIO.cleanup()

代码讲解:

  • global ledStatushttp://c.biancheng.net/cpp/html/1827.html
  • GPIO.add_event_detect(24, GPIO.RISING, callback=my_callback) :给24引脚添加一个事件函数,触发条件是:捕获到上升沿(GPIO.RISING)。这个参数还可以是:GPIO.FALLING(下降沿)、GPIO.BOTH(两者都有)
  • except KeyboardInterrupt: 是用来捕获用户是否按了Ctrl + C 组合键。退出程序
  • GPIO.cleanup():之前都没有使用过这个函数。这个函数的功能是:jaingaobo所有的GPIO还原回初始输入状态。我们建议在使用RPi.GPIO模块的所有Python程序的最后,都写上这个函数。

现在这个程序我们来运行一下:

  1. sudo chmod +x key_control_led_callback.py
  2. python key_control_led_callback.py

现在的运行效果就已经很好的,即使我们上面写的程序脚本里面没有编写按键去抖的相关程序,并且我们也没有安装硬件去抖的电容。但是为了安全起见,我们还是应该摆去抖的程序给它加上。

对于中断模式的检测按键,我们给这种程序添加去抖程序,相当的简单,我们只需要将上面的程序中的这行语句:

  1. GPIO.add_event_detect(24, GPIO.RISING, callback=my_callback)

修改为:

  1. GPIO.add_event_detect(24, GPIO.RISING, callback=my_callback, bouncetime=200)

其中bouncetime=200 是延时200ms的意思。就是当检测到上升沿后,进入这个中断,要延时200ms才会执行这个中断里面的程序。

这就是软件去抖。


搞定


参考网站:https://sourceforge.net/p/raspberry-gpio-python/wiki/Inputs/

更多精彩的博文,请访问:http://www.aobosir.com/

树莓派 Learning 003 — GPIO 003 中断模式 — 按键控制LED_Python_AoboSir.com-CSDN博客 - 图1 树莓派 Learning 003 — GPIO 003 中断模式 — 按键控制LED_Python_AoboSir.com-CSDN博客 - 图2

发布了287 篇原创文章 · 获赞 479 · 访问量 503万+