不断更新全局变量只打印第一个值

时间:2016-06-03 04:31:00

标签: python variables raspberry-pi global-variables

我试图在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)
'''

2 个答案:

答案 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)