使用物理按钮在不同的循环之间切换(Raspberry / Python)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用物理按钮在不同的循环之间切换(Raspberry / Python)相关的知识,希望对你有一定的参考价值。
我想创建一个有两个循环的简单程序,我可以通过按下物理按钮来改变它们,就像模式选择器一样。
模式1:加热 模式2:冷却
import RPi.GPIO as GPIO
import time
GPIO.setup(21, GPIO.IN, pull_up_down=GPIO.PUD_UP)
mode = 'heating'
def my_callback(channel):
if mode == 'heating'
mode = 'cooling'
print 'turned on cooling'
elif mode == 'cooling'
mode = 'heating'
print 'turned on heating'
GPIO.add_event_detect(21, GPIO.RISING, callback=my_callback)
while mode == 'heating'
print 'I am heating'
time.sleep(1.0)
while mode == 'cooling'
print 'I am cooling'
time.sleep(1.0)
当我运行此代码时,它以加热模式启动,当我按下按钮时回调运行但变量没有改变且加热循环仍在运行。
答案
你不能在你的代码中顺序循环,否则即使一切正常,你也只能在程序终止前按两次按钮。你应该做更像这样的事情:
while True:
if mode == 'heating':
print 'I am heating'
time.sleep(1.0)
if mode == 'cooling':
print 'I am cooling'
time.sleep(1.0)
另一答案
@Ted Klein Bergman在回复中写下了工作答案:
模式变量必须在函数中定义为全局变量。这个修改解决了这个问题:
def my_callback(channel):
if mode == 'heating'
global mode
mode = 'cooling'
print 'turned on cooling'
elif mode == 'cooling'
global mode
mode = 'heating'
print 'turned on heating'
感谢您的反馈!
以上是关于使用物理按钮在不同的循环之间切换(Raspberry / Python)的主要内容,如果未能解决你的问题,请参考以下文章
使用数据在 2 个不同的 NSViewController 之间切换