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"...
- 如何修改程序(或接线?)以便按钮点亮 LED?
提前致谢! :)
编辑:
下面是实际接线的照片:
对我来说,听起来你的按钮方向错了。将其旋转 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)
我试过用这样的按钮连接 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"...
- 如何修改程序(或接线?)以便按钮点亮 LED?
提前致谢! :)
编辑:
下面是实际接线的照片:
对我来说,听起来你的按钮方向错了。将其旋转 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)