我想创建一个有两个循环的简单程序,我可以通过按下物理按钮来改变它们,就像模式选择器一样。
模式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'
感谢您的反馈!