我不了解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];
这似乎只会在按下按钮后立即闪烁,但不会持续闪烁。
我该如何解决?
答案 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的差距,没有任何反应。
您可以选择:
使用线程。线程可以同时运行代码。有关示例,请参阅How to use threading in Python?。
最后运行一个短暂(0.1秒或更短)睡眠的循环。在循环中检查按钮按下并每隔n次重复翻转LED引脚。添加逻辑仅闪烁状态。