树莓派接开关,只需要将一个脚接到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)
运行结果: