LED按钮不起作用

时间:2016-04-25 18:11:04

标签: python raspberry-pi raspberry-pi2 gpio led

我尝试将LED连接到这样的按钮(来自" RPi中的冒险"),但是按钮的远端插在G(而不是F)。 breadboard

我使用以下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)

它导致了许多"按钮" ...

的打印
  • 如何修复程序(或接线?),以便按钮可以打开LED?
提前thx! :)

修改 这是实际布线的照片: photo of wiring 1

photo of wiring 1

2 个答案:

答案 0 :(得分:0)

对我而言,听起来你的按钮方向错误。旋转90度,看看是否有效。这是一个非常容易犯的错误:)enter image description here

如果这样做无效,请尝试仔细检查所有接线并确保将导线连接到右侧GPIO引脚

答案 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)