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

为什么我的Raspberry Pi一直检测到按键处于按下状态?

树莓派按键控制风扇/LED故障修复方案

故障根因

  • 逻辑运算符误用:Python中逻辑与判断需使用and,原代码使用位运算符&,位运算符优先级高于比较运算符,导致GPIO.input(13) == 0 & fanOn == True实际运算逻辑为GPIO.input(13) == (0 & fanOn) == True,条件判断完全失效,是持续误判按键状态的核心原因。
  • 输出逻辑冲突:循环首行直接将按键输入电平赋值给LED/风扇输出引脚13,和后续的状态切换逻辑冲突,导致按键动作时输出会先跟随按键电平变化,再被后续逻辑修改,触发先熄灭再亮起的异常表现。
  • 读取对象错误:判断条件读取的是输出引脚13的电平,而非按键输入引脚19的电平,逻辑链路完全错误。
  • 上拉输入逻辑适配错误:你配置了按键引脚为上拉输入PUD_UP,默认状态引脚为高电平,按键按下时为低电平,原逻辑没有适配该触发逻辑做状态切换判断。

修复后代码

import drivers
import time

display = drivers.Lcd()
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
# 按键输入引脚 上拉模式:默认高电平,按下为低电平
GPIO.setup(19, GPIO.IN, pull_up_down=GPIO.PUD_UP)
# 风扇/LED输出引脚
GPIO.setup(13, GPIO.OUT)
GPIO.output(13, 0)

fanOn = False
display.lcd_display_string("Fan: off", 1)

try:
    while True:
        # 读取按键状态,做按下触发判断
        key_state = GPIO.input(19)
        # 按键按下时(低电平)触发状态切换
        if key_state == 0:
            # 消抖延迟
            time.sleep(0.02)
            # 二次确认按键确实按下
            if GPIO.input(19) == 0:
                if fanOn:
                    # 切换为关闭状态
                    GPIO.output(13, 0)
                    display.lcd_backlight(1)
                    display.lcd_clear()
                    display.lcd_display_string("Fan: off", 1)
                    print("off")
                    fanOn = False
                else:
                    # 切换为开启状态
                    GPIO.output(13, 1)
                    display.lcd_backlight(1)
                    display.lcd_clear()
                    display.lcd_display_string("Fan: on ", 1)
                    print("on")
                    fanOn = True
                # 等待按键松开,避免重复触发
                while GPIO.input(19) == 0:
                    time.sleep(0.01)
        time.sleep(0.01)
except KeyboardInterrupt:
    GPIO.cleanup()
    display.lcd_clear()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:24:01