You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派4按键控制红、蓝、绿LED依次点亮代码故障咨询

问题原因

  • 你的代码没有做按键边沿检测:你按下按键的时长通常远大于循环间隔的10ms,只要按键保持按下状态,每次循环都会匹配对应previous_button_state的条件,导致状态连续切换3次,最终表现为按一次按键三个LED依次点亮
  • else分支逻辑错误:仅在按键未按下时关闭红色LED,蓝色、绿色LED不会被该分支控制,不符合预期逻辑
  • 缺少机械按键消抖逻辑,容易出现状态误判

修复方案

调整逻辑为仅在按键从松开变为按下的瞬间触发一次状态切换,同时修正LED控制逻辑即可实现预期效果,修复后的代码如下:

import RPi.GPIO as GPIO
import time

current_led_state = 0
last_button_level = GPIO.LOW
DEBOUNCE_DELAY = 0.02 # 20ms消抖时间

LED_RED = 17
LED_BLUE = 27
LED_GREEN = 22
BUTTON_PIN = 26

GPIO.setmode(GPIO.BCM)
# 按键如果没有外接下拉电阻,开启内部下拉避免电平浮动,接了上拉则删除pull_up_down参数即可
GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(LED_RED, GPIO.OUT)
GPIO.setup(LED_BLUE, GPIO.OUT)
GPIO.setup(LED_GREEN, GPIO.OUT)

# 初始全部熄灭
GPIO.output(LED_RED, GPIO.LOW)
GPIO.output(LED_BLUE, GPIO.LOW)
GPIO.output(LED_GREEN, GPIO.LOW)

while True:
    current_button_level = GPIO.input(BUTTON_PIN)
    # 检测按键按下的上升沿
    if current_button_level == GPIO.HIGH and last_button_level == GPIO.LOW:
        time.sleep(DEBOUNCE_DELAY)
        # 消抖后确认按键确实按下,再执行状态切换
        if GPIO.input(BUTTON_PIN) == GPIO.HIGH:
            if current_led_state == 0:
                # 点亮红色LED
                GPIO.output(LED_RED, GPIO.HIGH)
                GPIO.output(LED_BLUE, GPIO.LOW)
                GPIO.output(LED_GREEN, GPIO.LOW)
                current_led_state = 1
            elif current_led_state == 1:
                # 点亮蓝色LED
                GPIO.output(LED_RED, GPIO.LOW)
                GPIO.output(LED_BLUE, GPIO.HIGH)
                GPIO.output(LED_GREEN, GPIO.LOW)
                current_led_state = 2
            elif current_led_state == 2:
                # 点亮绿色LED
                GPIO.output(LED_RED, GPIO.LOW)
                GPIO.output(LED_BLUE, GPIO.LOW)
                GPIO.output(LED_GREEN, GPIO.HIGH)
                current_led_state = 0
    # 更新上一次的按键电平记录
    last_button_level = current_button_level
    time.sleep(0.01)

GPIO.cleanup()

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:06:03