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_in和printed_out正在打印的相应消息之后设置为真。您没有将它们设置回False因为如果条件永远不会满足,并且邮件将永远不会再次打印。你应该在如果块设置printed_out到假你在哪里打印该内部温度较高,同样设置printed_in到假在如果块你在哪里外面打印温度更高
答
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)
谢谢!它现在的工作:) – corus87