AoboSir 博客

与15年前的我比,我现在是大人;与15年后的我比,我现在还是个婴儿

树莓派 Learning 003 — GPIO 002 输入模式 — 按键控制LED


我的树莓派型号:Raspberry Pi 2 Model B V1.1 装机系统:NOOBS v1.9.2


我们在之前学会了如何进行输出,现在来讲讲如何进行输入:

使用按键为例。

我们先按照下面这幅图片连接电路:

Alt text

知识点:当你设置一个GPIO为输入模式的,这个GPIO口要么是连接到信号端,要么是接GND。注意设置为输入模式的GPIO口不允许悬空(floating)。(因为这种情况下GPIO输入的值是不确定的。)

上面这个图中, 按键的一个引脚连接一个10K电阻和树莓派的24引脚上,然后10K电阻连接GND。按键的另一个引脚连接到3V3。

LED还是正极连接到25引脚上,另一个引脚连接GND。


写程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# -*- coding:UTF-8 -*-

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(25, GPIO.OUT)

ledStatus = True

while True:
    if (GPIO.input(24) == GPIO.HIGH):
        print("button pressed!")
        ledStatus = not ledStatus
        if ledStatus:
            GPIO.output(25, GPIO.HIGH)
            pass
        else:
            GPIO.output(25, GPIO.LOW)
            pass
        time.sleep(0.03)
        pass
    time.sleep(0.01)
    pass

执行下面的命令,来启动这个程序脚本:

1
2
sudo chmod +x key_control_led.py
python key_control_led.py

你会发现这个运行效果并不是很好:主要的原因就是因为按键的去抖。你可以使用硬件去抖(就是在按键的引脚上并联一个电容),也可以软件去抖,上面的程序中已经进行软件去抖了(你可以通过增大延时时间来改善程序运行效果)。


到现在应该学会了如何使用GPIO的输入模式了。

上面检测按键的程序,它是用轮询的方式,接下来,我们来学习,如果使用GPIO的中断模式,来实现使用中断的方式来检测一个按键是否被按下。

Comments