使用 Python 控制树莓派的 LED 灯 - 双按键开关控制

本教程将指导你使用 Python 和 RPi.GPIO 库来控制树莓派的 GPIO 引脚,实现两个按键控制 4 个 LED 灯的开关状态。

功能需求:

  • K1 键: 控制所有 4 个 LED 灯的整体开/关
    • 按下 K1 键,所有 LED 灯全开
    • 再次按下 K1 键,所有 LED 灯全关
  • K2 键: 控制左右两组 LED 灯的独立开/关
    • 按下 K2 键,左边的 2 个 LED 灯开,右边的 2 个 LED 灯关
    • 再次按下 K2 键,切换开关的 LED 灯内容,即左边的 2 个 LED 灯关,右边的 2 个 LED 灯开

示例代码:

import RPi.GPIO as GPIO
import time

# 设置 GPIO 模式为 BCM 模式
GPIO.setmode(GPIO.BCM)

# 定义 LED 引脚
led_pins = [18, 23, 24, 25]
left_led_pins = [18, 23]
right_led_pins = [24, 25]

# 初始化 LED 引脚为输出模式
GPIO.setup(led_pins, GPIO.OUT)
GPIO.setup(left_led_pins, GPIO.OUT)
GPIO.setup(right_led_pins, GPIO.OUT)

# 定义变量来控制 LED 的状态
led_status = False
left_led_status = False
right_led_status = False

# 定义 K1 键的回调函数
def k1_callback(channel):
    global led_status
    if led_status:
        # 如果 LED 灯是开的,则关闭 LED 灯
        GPIO.output(led_pins, GPIO.LOW)
        led_status = False
    else:
        # 如果 LED 灯是关的,则打开 LED 灯
        GPIO.output(led_pins, GPIO.HIGH)
        led_status = True

# 定义 K2 键的回调函数
def k2_callback(channel):
    global left_led_status, right_led_status
    if left_led_status and right_led_status:
        # 如果左右两组 LED 灯都是开的,则关闭 LED 灯
        GPIO.output(left_led_pins, GPIO.LOW)
        GPIO.output(right_led_pins, GPIO.LOW)
        left_led_status = False
        right_led_status = False
    else:
        # 如果左右两组 LED 灯有一个是关的,则打开 LED 灯
        GPIO.output(left_led_pins, GPIO.HIGH)
        GPIO.output(right_led_pins, GPIO.HIGH)
        left_led_status = True
        right_led_status = True

# 设置 K1 键和 K2 键的 GPIO 引脚为输入模式,并设置上拉电阻
GPIO.setup(27, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(22, GPIO.IN, pull_up_down=GPIO.PUD_UP)

# 添加事件检测,当 K1 键或 K2 键按下时调用对应的回调函数
GPIO.add_event_detect(27, GPIO.FALLING, callback=k1_callback, bouncetime=200)
GPIO.add_event_detect(22, GPIO.FALLING, callback=k2_callback, bouncetime=200)

# 主循环
try:
    while True:
        time.sleep(0.1)
except KeyboardInterrupt:
    pass

# 清理 GPIO 资源
GPIO.cleanup()

代码解释:

  1. 导入库: 导入 RPi.GPIO 库用于控制 GPIO 引脚,以及 time 库用于延时。
  2. 定义引脚: 定义 LED 灯和按键的 GPIO 引脚编号。
  3. 初始化引脚: 将 LED 引脚设置为输出模式,按键引脚设置为输入模式,并设置上拉电阻。
  4. 定义变量: 定义变量来存储 LED 灯的当前状态。
  5. 定义回调函数: 为每个按键定义回调函数,当按键按下时调用对应的函数来改变 LED 灯的状态。
  6. 事件检测: 添加事件检测,当按键按下时(GPIO 电平下降)调用相应的回调函数。
  7. 主循环: 使用 while True 循环让程序持续运行,并在循环中使用 time.sleep() 函数来延时,避免程序占用过多 CPU 资源。
  8. 异常处理: 使用 try...except 块来捕获键盘中断信号,以便在用户按下 Ctrl+C 时安全退出程序。
  9. 清理资源: 在程序结束时使用 GPIO.cleanup() 函数来清理 GPIO 资源。

运行程序:

  1. 将代码保存为 Python 文件(例如,led_control.py)。
  2. 在树莓派终端中运行命令 sudo python3 led_control.py
  3. 按下 K1 键或 K2 键测试 LED 灯的控制。

注意:

  • 确保 LED 灯的连接方式正确,并且引脚与代码中定义的引脚一致。
  • 确保树莓派已启用 GPIO 功能,可以通过命令 sudo raspi-config 进行设置。
  • 运行程序时需要使用 sudo 命令以获取权限访问 GPIO 引脚。

更多功能:

  • 可以添加更多按键,实现更复杂的功能。
  • 可以使用其他库,例如 RPi.GPIOwiringpi 来控制 GPIO 引脚。
  • 可以使用 GUI 工具来创建更加友好的用户界面。

希望本教程能够帮助你使用 Python 控制树莓派的 LED 灯,并进行更深入的探索。

树莓派 Python 控制 LED 灯程序:实现双按键开关控制

原文地址: https://www.cveoy.top/t/topic/o4P6 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录