树莓派GPIO接开关按钮,并判断单击、双击、长按

发布于 / 树莓派 / Comments Off on 树莓派GPIO接开关按钮,并判断单击、双击、长按

树莓派接开关,只需要将一个脚接到3.3V电源,另一个脚接GPIO的输入即可。

在Python中,可以通过GPIO库进行判断:

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.OUT)   #这里我是用的是GPIO4,7号引脚

print(GPIO.input(4))

这样,当3.3v与GPIO4短接时,程序会打印1,断开会打印0

还有一种写法:

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.IN)   #这里改成了IN

print(GPIO.input(4))

这样需要一个脚接地,一个接GPIO4,短接时为0,断开为1。

下面的所有教程全部按照第一种写法来写!

判断按下,我们只需要写个死循环每隔10毫秒检查一次GPIO是否短接即可,判断长按,我们写个循环,如果在2秒内,GPIO始终短路,则判定长按。判断双击,只需要判断在1秒内是否单击了两次即可。三连击往后也是一样的道理,这里不再写出。

代码如下:

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.OUT)

def click():
    result = 0   #长按返回0,单击返回1,双击返回2
    for i in range(200):
        sig = GPIO.input(4)                             #输入的电平信号
        if sig == GPIO.LOW and result == 0:  #第一次发现没有在按着
            result = 1
        if result == 1 and sig == GPIO.HIGH:
            result = 2
            return result
        if i >= 100 and result != 0:  #如果不是长按,1秒内返回结果
            return result
        time.sleep(0.01)   #每10s执行一次判断
    return result

while True:
    if GPIO.input(4) == GPIO.HIGH:
        click_time = click()
        if click_time == 0:
            print('你长按了')
        else:
            print('你单击了%d下' % click_time)
    time.sleep(0.1)

运行结果:

捕获.JPG

转载原创文章请注明,转载自: 斐斐のBlog » 树莓派GPIO接开关按钮,并判断单击、双击、长按
评论已关闭