在树莓派上用python编写单个触控按键驱动

序言:

树莓派作为时下流行的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参数后,执行正确。


触控驱动调试结果

参考资料:

1.fhqlongteng.树莓派 RPI.GPIO 使用手册.   

2.Avada__Kedavra. Python 错误之函数takes 0 positional arguments but 1 was given.

你可能感兴趣的:(在树莓派上用python编写单个触控按键驱动)