LED 按钮不工作

LED button doesn't work

我试过用这样的按钮连接 LED(来自 "Adventures in RPi"),但按钮的远端插入 G(而不是 F)。

我 运行 使用以下 Python 程序(按照上述书中的说明):

import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.OUT)
GPIO.setup(24, GPIO.IN)
while True:
    if GPIO.input(24):
        GPIO.output(23, True)
    else:
        GPIO.output(23, False)
        time.sleep(0.1)

但是当我尝试 运行 该程序时它不起作用。为了调试它,我将 if 代码块更改为:

    print("button")
    ##GPIO.output(23, True)

它导致许多打印 "button"...

提前致谢! :)

编辑: 下面是实际接线的照片:

对我来说,听起来你的按钮方向错了。将其旋转 90 度,看看是否可行。这是一个很容易犯的错误:)

如果这没有帮助,请尝试仔细检查所有接线并确保将电线连接到正确的 GPIO 引脚

你写了把 print("button") 放在 if 语句中 "resulted in many prints of "button"..." 但你没有提到是否它在按下按钮时打印,不断打印或看似随机打印。这是重要的部分。

关于 hardware/wiring...

  • 如果您将 LED 接反了,请尝试转动 LED。最长的 leg/lead 为正数。

  • 电阻值看起来像 330 欧姆和 10k 欧姆 - 没问题。 3v3 时的 330 欧姆将允许 10 mAs 流过 LED,这应该足以将其点亮。一般来说,10 K 是一个很好的按钮上拉值。

  • 为了更好地衡量,请用低值电阻器(例如 330 欧姆)替换绿色面包板线。这将使 Pi 免受过电流的影响。

关于脚本...

RPI.GPIO 模块支持线程回调时,没有理由不断轮询按钮的变化。如果您改为使用该方法,您的脚本将可以自由地做其他事情 您正在监听按钮按下。如果当您按下按钮时下面的脚本打印 "Button was pressed!",您就知道按钮电路和软件正在工作。您也可以跳过按钮电路,只需将 GPIO 通过电阻连接到 3v3 即可直接检查 - 更简单。不管怎样,这里有一个脚本可以释放你的主循环:

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.OUT)
GPIO.setup(24, GPIO.IN)

led_on = False:

def callback_func(pin):
    # you don't really need to use globals here but for now it'll work
    global led_on
    print("Button was pressed!")
    if led_on:
        GPIO.output(23, LOW)
    else:
        GPIO.output(23, HIGH)
    # toggle LED at every button press 
    led_on = not led_on


# change GPIO.RISING to GPIO.FALIING if your button is active low. 
# added 200 ms. of debounce time because you're using a mechanical switch
GPIO.add_event_detect(24, GPIO.RISING, callback=callback_func, bouncetime=200)

def main():
    while True:
        print("Main loop isn't blocked!")
        time.sleep(5)