我试图在7段显示器上显示温度传感器的温度。两者都连接到我的Raspberry Pi。我需要将当前温度存储在变量中,当然这总是在变化。
我的问题是变量只打印脚本运行时的温度。它不随温度的变化而变化。
import os
import time
os.system('modprobe wl-gpio')
os.system('modprobe wl-therm')
temp_sensor = '/sys/bus/w1/devices/28-0316201553ff/w1_slave'
temp_f = 0
def temp_raw():
f = open(temp_sensor, 'r')
lines = f.readlines()
f.close()
return lines
def read_temp():
lines = temp_raw()
while lines[0].strip()[-3:] != 'YES':
time.sleep(0.2)
lines = temp_raw()
temp_output = lines[1].find('t=')
if temp_output != -1:
temp_string = lines[1].strip()[temp_output + 2:]
temp_c = float(temp_string) / 1000.0
temp_f = temp_c * 9.0 // 5.0 + 32.0
global temp_f
temp_f = int(temp_f)
read_temp()
while True:
print(temp_f)
time.sleep(1)
# Below is what I will eventually need to run in order to display the digits on my 7-segment display.
'''
while True:
print( map(int,str(temp_f)) )
time.sleep(1)
'''
答案 0 :(得分:2)
您只需读取一次温度并在while
循环中反复显示相同的值。你应该定期重新读取循环内的温度:
while True:
read_temp()
print(temp_f)
time.sleep(1)
如果温度读取操作需要太多功率,则较大的sleep
值可能会有所帮助。
答案 1 :(得分:1)
您只需调用read_temp()
一次,并在每次迭代时打印相同的值。将你的循环改为:
while True:
read_temp()
print(temp_f)
time.sleep(1)
然而,像这样的全局变量使用往往会导致可维护性问题。我这样做:
def read_temp():
lines = temp_raw()
while lines[0].strip()[-3:] != 'YES':
time.sleep(0.2)
lines = temp_raw()
temp_output = lines[1].find('t=')
if temp_output != -1:
temp_string = lines[1].strip()[temp_output + 2:]
# temp_c = float(temp_string) / 1000.0
temp_f = temp_c * 9.0 // 5.0 + 32.0
return int(temp_f)
while True:
temp_f = read_temp()
print(temp_f)
time.sleep(1)