簡體   English   中英

Python循環僅打印一次狀態更改

[英]Python loop print change of state only once

我是Python的新手,剛開始了解基本知識。 我試圖在循環中運行腳本以檢查溫度,並且如果外部溫度高於內部溫度或相反溫度,則該函數應打印一次並繼續每5秒檢查一次狀態是否改變。 我發現了一個類似的問題,那是非常有幫助的,但是如果執行代碼,則打印外部溫度會更高,接下來,我加熱內部傳感器並打印出內部溫度更高,除非它不會繼續,否則一切正常。循環有效,但無法識別狀態的下一個變化。

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都設置為True 您沒有將它們設置回False ,因此if條件將永遠不會得到滿足,消息也將不再打印。 你應該設置printed_outFalse,如果塊,你要打印的內部溫度較高 ,同樣printed_in設置為False,如果塊,你要打印外界溫度較高

    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)    

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM