使用物理按钮在不同的循环之间切换(Raspberry / Python)

问题描述 投票:0回答:2

我想创建一个有两个循环的简单程序,我可以通过按下物理按钮来改变它们,就像模式选择器一样。

模式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)

当我运行此代码时,它以加热模式启动,当我按下按钮时回调运行但变量没有改变且加热循环仍在运行。

python loops while-loop raspbian
2个回答
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)

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'

感谢您的反馈!

© www.soinside.com 2019 - 2024. All rights reserved.