Python循环只打印一次状态

问题描述:

我对Python很新,我刚开始了解基础知识。 我试图在循环中运行脚本来检查温度,如果外部温度高于内部或相反,函数应打印一次,并继续每5秒检查一次,以查看是否有更改的状态。 我发现了一个类似的questions什么是非常有用的,但如果我执行代码它打印外部温度更高,接下来我加热内部传感器,它打印它内部更高,除了它不会继续,该循环有效,但它不能识别下一次状态变化。 。Python循环只打印一次状态

import RPi.GPIO as GPIO 
import time  
sensor_name_0 = "test" 
printed_out = False 
printed_in = False 

try: 
    while True: 
    if sensor_name_0: 
     sensor_0 = open('/sys/devices/w1_bus_master1/w1_master_slaves','r').read().split('\n')[0] 
     sensor_1 = open('/sys/devices/w1_bus_master1/w1_master_slaves','r').read().split('\n')[1] 

     sensorpath = "/sys/bus/w1/devices/"     
     sensorfile = "/w1_slave"           

    def callsensor_0(sensor_0): 
     f = open(sensorpath + sensor_0 + sensorfile, 'r')  
     lines = f.readlines()             
     f.close()                 
     temp_line = lines[1].find('t=') 
     temp_output = lines[1].strip() [temp_line+2:] 
     temp_celsius = float(temp_output)/1000   
     return temp_celsius 

    def callsensor_1(sensor_1):   
     f = open(sensorpath + sensor_1 + sensorfile, 'r')  
     lines = f.readlines()             
     f.close()                 
     temp_line = lines[1].find('t=') 
     temp_output = lines[1].strip() [temp_line+2:] 
     temp_celsius = float(temp_output)/1000   
     return temp_celsius 


    outside = (str('%.1f' % float(callsensor_0(sensor_0))).rstrip('0').rstrip('.')) 
    inside = (str('%.1f' % float(callsensor_1(sensor_1))).rstrip('0').rstrip('.')) 
    print "loop" 

    if outside > inside and not printed_out:       
     printed_out = True 
     print "outside is higher then inside" 
     print outside 


    if outside < inside and not printed_in: 
     printed_in = True 
     print "inside is higher then outside" 
     print inside 

    time.sleep(5)  

except KeyboardInterrupt: 
print('interrupted!') 

两个标志printed_inprinted_out正在打印的相应消息之后设置为真。您没有将它们设置回False因为如果条件永远不会满足,并且邮件将永远不会再次打印。你应该在如果块设置printed_out你在哪里打印该内部温度较高,同样设置printed_in如果块你在哪里外面打印温度更高

+1

谢谢!它现在的工作:) – corus87

if outside > inside and not printed_out:       
     printed_out = True 
     print "outside is higher then inside" 
     print outside 
     printed_in = False 

    if outside < inside and not printed_in: 
     printed_in = True 
     print "inside is higher then outside" 
     print inside 
     printed_out = False 
    time.sleep(5)