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