我尝试将LED连接到这样的按钮(来自" 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)
它导致了许多"按钮" ...
的打印答案 0 :(得分:0)
答案 1 :(得分:0)
您写道,将print("button")
放入if
语句“会导致许多”按钮“打印...”但是您没有提到它是否按按钮按下,不断打印或随机打印时打印。这是重要的部分。
关于硬件/布线......
尝试转动LED,以防您反向连接。最长的腿/铅是正面的。
电阻值看起来像330欧姆和10欧姆 - 这很好。 3v3时330欧姆将允许10 mAs流过LED,这应该足以将其打开。一般来说,10 K对于按钮来说是一个很好的上拉值。
为了更好地测量,请使用低值电阻(例如330欧姆)更换绿色面包板电线。这将使Pi免受过电流的影响。
关于剧本......
当RPI.GPIO
模块支持线程回调时,没有理由不断轮询按钮以进行更改。如果您使用该方法,您的脚本可以自由地执行其他操作,而您正在监听按钮按下。如果下面的脚本打印“按下了按钮!”当您按下按钮时,您知道按钮电路和软件正在工作。您也可以跳过按钮电路,只需通过电阻将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)