在树莓派上按下按钮时,LED会持续闪烁吗?

时间:2015-09-29 03:34:46

标签: python raspberry-pi raspbian gpio led

我不了解Python,但我在原型课中使用它。我想要做的是使用我的RPi上的GPIO引脚点亮LED。那部分我得到了,没问题。但是现在我想添加一个按钮并在按下按钮时闪烁,并在释放按钮后继续闪烁。像这样: LED亮起,按下按钮,LED熄灭,亮起,LED熄灭,LED亮,保持亮,保持亮,LED熄灭,LED亮,LED熄灭,LED亮,保持亮,永远。这就是我所拥有的:

SKSpriteNode *yourPhysicsSprite = [SKSpriteNode spriteNodeWithImageNamed:@"yourPNG"];
yourPhysicsSprite.physicsBody = [SKPhysicsBody bodyWithTexture:yourPhysicsSprite.texture alphaThreshold:0.0f size:yourPhysicsSprite.texture.size];

这似乎只会在按下按钮后立即闪烁,但不会持续闪烁。

我该如何解决?

2 个答案:

答案 0 :(得分:1)

你想要什么让它停止闪烁吗?如果不是:

blinking = False
while True:
    if GPIO.input(16):
        blinking = True

    if blinking:
        blink(11)

    time.sleep(.1)

您最初检查输入16(按钮状态),并在按钮关闭时调用blink()功能一次;下次未设置输入16时while True的顶部,blink()未被调用。

(如果您在另一个输入引脚上有第二个停止按钮,则可以添加另一个GPIO.input()检查,并使用不同的数字将blinking设置为false。)

请注意,您将输出引脚编号11传递给闪烁功能,但不是使用传递的值;为了使该功能更加通用,您可以将其更改为:

def blink(pin):
    GPIO.output(pin, GPIO.LOW)
    time.sleep(.2)
    GPIO.output(pin, GPIO.HIGH)
    time.sleep(.2)
    GPIO.output(pin, GPIO.LOW)
    time.sleep(.2)
    GPIO.output(pin, GPIO.HIGH)
    time.sleep(.2)
    GPIO.output(pin, GPIO.LOW)
    time.sleep(.2)
    GPIO.output(pin, GPIO.HIGH)
    time.sleep(4)

答案 1 :(得分:1)

您的问题很容易解释。当程序睡觉时,它会睡觉。什么都不会发生。当您输入blink()时,程序的其余部分将被阻止约5秒。没有按下按钮会被注意到。还会有4s的差距,没有任何反应。

您可以选择:

  1. 使用线程。线程可以同时运行代码。有关示例,请参阅How to use threading in Python?

  2. 最后运行一个短暂(0.1秒或更短)睡眠的循环。在循环中检查按钮按下并每隔n次重复翻转LED引脚。添加逻辑仅闪烁状态。