我' M试图在同一个程序两个循环,但只停留在第一个环和它doesn'吨转到第二圈......我' M试图使程序将温度写入文本文件而不覆盖自己...我的程序是:
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(18,GPIO.OUT)
os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')
base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'
def read_temp_raw():
f = open(device_file, 'r')
lines = f.readlines()
f.close()
return lines
def read_temp():
lines = read_temp_raw()
while lines[0].strip()[-3:] != 'YES':
time.sleep(0.2)
lines = read_temp_raw()
equals_pos = lines[1].find('t=')
if equals_pos != -1:
temp_string = lines[1][equals_pos+2:]
temp_c = float(temp_string) / 1000.0
return temp_c
while True:
print(read_temp())
time.sleep(0.5)
if read_temp() > 25:
GPIO.output(18, True)
else:
GPIO.output(18, False)
while True:
f = open("temperatureFile.txt", "w")
f.write(read_temp())
f.close
答案 0 :(得分:0)
你的第一个循环永远不会退出。如果你想将温度附加到文件,你应该在第一个循环中添加该调用,并完全摆脱第二个循环。
while True:
time.sleep(0.5)
temp = read_temp()
with open("temperatureFile.txt", "a") as f:
f.write(temp)
if temp > 25:
GPIO.output(18, True)
else:
GPIO.output(18, False)
请注意,您的原始代码会不断重写温度文件,而不是附加到它,因为您在写入模式下打开它。
更好的想法可能是将多个温度累积到列表中,然后在超过0.5秒的时间之后,批量写入这些值。我将把它作为练习留给读者。
答案 1 :(得分:0)
您的程序永远不会退出第一个while循环,因为代码中的任何位置都没有break
语句。我假设你想做的事情是这样的
outfile = open("temperatureFile.txt", "a")
while True:
temp=read_temp()
print(temp)
time.sleep(0.5)
if temp > 25:
GPIO.output(18, True)
else:
GPIO.output(18, False)
outfile.write(temp)
outfile.close()