序言:
树莓派作为时下流行的DIY平台,python作为流行的编程语言,玩树莓派是一种态度,写python代码是一种生活情趣。
周五是个好日子,因为周末来了。
忙碌了一周,周五休息一下,玩玩树莓派,学习python,让大脑放个假。
触控按键相较机械按钮而言,耐磨,使用起来非常方便。
购买树莓派套件里有单个触控按键,玩起来吧。
一、原理
触控按键外观如下,属于电容性触控按键,主控是JR223B(见图中U1)。手摸按键区域或悬浮表明,PCB触控区产生感应电容,触控IC处理后知道有触控事件,使SIG输出高电平;没有触控时,SIG输出低电平。
触控按键外观
树莓派通过一个GPIO连接SIG,通过监测触控模块的SIG引脚的电平,就可以知道按键是否按下。原理如下:
0->1(上升沿):表示按键按下(触摸)。
1->1:表示触摸一直都在(手没有离开,相当于长按)
1->0(下降沿):表示按键松开。
0->0:无触控
监测方法有二,一是循环查询SIG电平;二是利用GPIO中断。
因为触摸事件比较随机,而且不会很频繁,所以GPIO中断方式最有效。
利用RPi.GPIO库的add_event_dectect()函数和add_event_callback()函数
二、连线
触控模块与树莓派连线
三、编程
代码如下,把所有相关操作封装到函数里,既调用方便代码又简洁。
#!touchkey.py--触摸按键程序
#encoding == utf-8
import RPi.GPIO as GPIO
import time
touch_key = 12 # touchkey ---->GPIO12
#按键处理函数,参数self如果不加的话,会报错
#检测到按键上升沿事件,只执行一次。
#就算手指一直不放开,不会重复执行。
def mykeyprocess(self):
print("You touch the touch key!!!!!!!")
print("触控按键电平:",GPIO.input(touch_key))
#初始化函数
def init(keyhandler):
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(touch_key,GPIO.IN)
GPIO.add_event_detect(touch_key,GPIO.RISING)
#最后一个参数为软件去抖时间,500ms
GPIO.add_event_callback(touch_key,keyhandler)
def destroy():
try:
GPIO.remove_event_detect(touch_key)
GPIO.cleanup()
except:
print("touchkey: GPIO cleanup fail.")
if(__name__=='__main__'):
try:
init(mykeyprocess)
while True:
print("waiting for your touch!!")
print("触控按键电平:",GPIO.input(touch_key))
time.sleep(1)
except:
destroy()
四、调试
mykeyprocess函数必须加上一个参数self,否则触摸时回调函数mykeyprocess无法正确执行,提示以下错误:
TypeError: mykeyprocess() takes 0 positional arguments but 1 was given
增加self参数后,执行正确。
触控驱动调试结果