2016-06-03 9 views
2

Ich versuche, die Temperatur von einem Temperatursensor auf einem 7-Segment-Display anzuzeigen. Beide sind mit meinem Raspberry Pi verbunden. Ich muss die aktuelle Temperatur in einer Variablen speichern, und natürlich ändert sich das ständig.Konstante Aktualisierung globale Variable nur Drucken ersten Wert

Mein Problem ist, dass die Variable nur druckt, was die Temperatur an dem Punkt ist, an dem das Skript ausgeführt wird. Es ändert sich nicht, wenn sich die Temperatur ändert.

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) 
''' 

Antwort

2

Du liest gerade nur die Temperatur einmal und denselben Wert immer und immer in Ihrer while Schleife anzeigt. Sie sollten die Temperatur im Inneren der Schleife neu lesen regelmäßig:

while True: 
    read_temp() 
    print(temp_f) 
    time.sleep(1) 

Ein größerer sleep Wert kann helfen, wenn die Temperatur Lesevorgang zu viel Energie erfordert.

1

Sie rufen nur read_temp() einmal auf und drucken den gleichen Wert bei jeder Iteration. Ändern Sie Ihre Schleife zu diesem:

while True: 
    read_temp() 
    print(temp_f) 
    time.sleep(1) 

Allerdings führt globale Variable Verwendung wie diese zu Wartungsprobleme auf der Straße führen. Ich würde es so machen:

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)