第二节:按键的三种检测方式(具体可参见网址)
1.轮巡的方式检测:
官网的说明截图,下面来个具体实例小程序(按键按下,RGB三灯全亮)
#!/usr/bin/python
# -*- coding:utf-8 -*-
#GPIO模块的输出
#1.引脚使能
#2.输出使能
#3.输出高低电平
import RPi.GPIO as GPIO
import time
I = 18
flag = False
R = 23
G = 24
B = 25
GPIO.setup(I,GPIO.IN)
GPIO.setup((R,G,B,),GPIO.OUT)
try:
while True:
if GPIO.input(I) == GPIO.HIGH:
GPIO.output((R,G,B,),GPIO.HIGH)
if GPIO.input(I) == GPIO.LOW:
GPIO.output((R,G,B,),GPIO.LOW)
except KeyboardInterrupt:
GPIO.cleanup(I)
2.边缘检测的方式:
来个小案例解释一下,功能同上一个案例:
#!/usr/bin/python
# -*- coding:utf-8 -*-
#GPIO模块的输出
#1.引脚使能
#2.输出使能
#3.输出高低电平
import RPi.GPIO as GPIO
import time
I = 18
flag = False
R = 23
G = 24
B = 25
GPIO.setup(I,GPIO.IN)
GPIO.setup((R,G,B,),GPIO.OUT)
try:
while True:
if GPIO.wait_for_edge(I,GPIO.RISING):
time.sleep(0.01)
if GPIO.input(I) == GPIO.HIGH:
GPIO.output((R,G,B,),GPIO.HIGH)
if GPIO.wait_for_edge(I,GPIO.FALLING):
time.sleep(0.01)
if GPIO.output((R,G,B,),GPIO.LOW):
GPIO.output((R,G,B,),GPIO.LOW)
except KeyboardInterrupt:
GPIO.cleanup(I)
3.中断的方式检测:
小小的案例奉上供参考:
#!/usr/bin/python
# -*- coding:utf-8 -*-
#GPIO模块的输出
#1.引脚使能
#2.输出使能
#3.输出高低电平
import RPi.GPIO as GPIO
import time
I = 18
R = 23
G = 24
B = 25
GPIO.setup(I,GPIO.IN)
GPIO.setup((R,G,B,),GPIO.OUT)
GPIO.setwarnings(False)
def leds_switch(channel):
if channel == I:
GPIO.output((R,G,B,),GPIO.input(I))
GPIO.add_event_detect(I,GPIO.BOTH,callback=leds_switch,bouncetime=20)
try:
while True:
print("123")
time.sleep(1)
pass
except KeyboardInterrupt:
GPIO.cleanup(I)
GPIO.cleanup((R,G,B,))
以上就是三种检测的方式,现在来一起做个练习吧巩固一下:中断方式实现按键每按一次,灯的状态切换,顺序为白红绿蓝黑。
#!/usr/bin/python
# -*- coding:utf-8 -*-
#GPIO模块的输出
#1.引脚使能
#2.输出使能
#3.输出高低电平
import RPi.GPIO as GPIO
import time
I = 18
R = 23
G = 24
B = 25
status = [1,1,1]
GPIO.setup(I,GPIO.IN)
GPIO.setup((R,G,B,),GPIO.OUT,initial=GPIO.HIGH)
GPIO.setwarnings(False)
def leds_switch(channel):
if flag == 1:
status = [1,0,0]
elif flag == 2:
status = [0,1,0]
elif flag == 3:
status = [0,0,1]
elif flag == 4:
status = [0,0,0]
elif flag == 5:
status == [1,1,1]
else :
pass
flag = flag +1
if flag > 5:
flag = 1
GPIO.output((R,G,B,),status)
GPIO.add_event_detect(I,GPIO.RISING,callback=leds_switch,bouncetime=100)
try:
while True:
# time.sleep(1)
pass
except KeyboardInterrupt:
GPIO.cleanup(I)
GPIO.cleanup((R,G,B,))
是不是很简单。。。