树莓派 按键控制小灯

1、实现要求

1.1、运用树莓派设计一个简单的按键控制LED灯点亮系统。通过树莓派控制器读取外部数字信号,使用三个按键分别控制三种颜色的 LED灯,当有按键按下时对应的LED灯会点亮,按键松开后对应的LED灯则熄灭。

1.2、按下三个按键中的一个按键时,可以看到对应的一个LED灯会点亮;同时按下其中两个按键时,对应的两个LED灯会亮起;同时按下三个按键时则三个LED灯同时亮起。

2、涉及技术

2.1、树莓派的输入输出引脚控制

2.2、python 线程的基本操作

3、实现原理

3.1、RGB三色灯有四个引脚,高电平接3.3V,其它三个引脚对应三种色源,对应的引脚输入低电平时灯亮,输入高电平时灯灭。

3.2、轻触开关有两组共4个脚,每组的2根脚是互相联通,电会从这俩脚里流过,按钮的作用就是按下去电路就联通了,否则就断开。

3.3、GPIO有个input模式,如果输入电流到GPIO口,那么编程读取GPIO返回HIGH,如果没有输入电流则返回LOW,从而我们可以检测到按钮的状态变化。

3.4、多线程类似于同时执行多个不同程序,使用线程可以把占据长时间的程序中的任务放到后台去处理。

4、系统组成

系统主要由树莓派、3个轻触开关和3个RGB灯组成,树莓派是整个系统的核心,通过检测按键的开关状态控制相应灯的亮灭。

5、硬件连接

        5.1、实物连接图:

5.2、连接原理图:

 

 

6、实现步骤

6.1、初始化引脚

设置引脚编号模式为BCM,按键对应引脚为输入模式并使用软件下拉模式,RGB灯相应引脚设为输出模式,并初始化为高电平。

# 采用BCM引脚编号
GPIO.setmode(GPIO.BCM)
# 关闭警告
GPIO.setwarnings(False)
# 设置GPIO输入模式, 使用GPIO内置的下拉电阻, 即开关断开情况下输入为LOW
GPIO.setup(channel_R, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
GPIO.setup(channel_G, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
GPIO.setup(channel_Y, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)

GPIO.setup(LED_R,GPIO.OUT, initial=GPIO.HIGH)
GPIO.setup(LED_G,GPIO.OUT, initial=GPIO.HIGH)
GPIO.setup(LED_Y1,GPIO.OUT, initial=GPIO.HIGH)
GPIO.setup(LED_Y2,GPIO.OUT, initial=GPIO.HIGH)

 

6.2、新建一个线程事件,监听按键状态

# 开关闭合的处理
def on_switch():
    GPIO.output(LED, GPIO.LOW)
def off_switch():
    GPIO.output(LED, GPIO.HIGH)
def thread():
    try:
        while True:
            # 如果检测到电平RISING, 说明开关闭合
            if GPIO.input(channel):
                on_switch()
            else:
                off_switch()
            # 可以在循环中做其他检测
            time.sleep(0.1)     # 10毫秒的检测间隔
    except Exception as e:
        print(e)

 

6.3、在主线程里开启三个按键对应的线程

tr=Thread(target=thread_R)
tr.start()
tg=Thread(target=thread_G)
tg.start()
ty=Thread(target=thread_Y)
ty.start()

 

7、运行结果

        7.1、按下一个按钮时,对应的RGB灯点亮

       

        7.2、按下两个按钮时,对应的两个RGB灯点亮

       

        7.3、按下三个按键时,三个RGB灯都点亮

      

8、实验总结

    1、GPIO输入安全电压应该是3.3V,因此按键使用树莓派的3.3V供电口而不是5V;

    2、GPIO引脚悬空时,受周遭环境干扰可能产生微弱电流,导致GPIO输入时高时低,因此程序需要开启GPIO口的下拉或上拉模式。

  • 3
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值