原创 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
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(24, GPIO.IN, pull_up_dwon=GPIO.PUD_DOWN)
GPIO.setup(25, GPIO.OUT)
ledStatus = True
def my_callback(channel):
print("button pressed!")
global ledStatus
ledStatus = not ledStatus
if ledStatus:
GPIO.output(25, GPIO.HIGH)
pass
else:
GPIO.output(25, GPIO.LOW)
pass
pass
GPIO.add_event_detect(24, GPIO.RISING, callback=my_callback)
while True:
try:
print("I'm working...")
time.sleep(5)
pass
except KeyboardInterrupt:
break
pass
pass
GPIO.cleanup()
代码讲解:
global ledStatus
:http://c.biancheng.net/cpp/html/1827.htmlGPIO.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程序的最后,都写上这个函数。
现在这个程序我们来运行一下:
sudo chmod +x key_control_led_callback.py
python key_control_led_callback.py
现在的运行效果就已经很好的,即使我们上面写的程序脚本里面没有编写按键去抖的相关程序,并且我们也没有安装硬件去抖的电容。但是为了安全起见,我们还是应该摆去抖的程序给它加上。
对于中断模式的检测按键,我们给这种程序添加去抖程序,相当的简单,我们只需要将上面的程序中的这行语句:
GPIO.add_event_detect(24, GPIO.RISING, callback=my_callback)
修改为:
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/
发布了287 篇原创文章 · 获赞 479 · 访问量 503万+