[英]Is there a better way to average two temperature sensor inputs?
我正在為我的汽車建造一個頂置控制台。 我想使用來自兩個溫度傳感器的平均讀數顯示室外溫度。 我目前正在使用 Timo 的庫,並且能夠從每個傳感器中檢索溫度。 當我嘗試平均或轉換臨時值時,除了閃爍的光標外,運行代碼時沒有任何反應。 我是python的新手。
我嘗試調整我的定義,輸入語句的順序,我已將語句的位置從 if 語句內部更改為外部。 希望它是我錯過的東西。 如果我的問題格式不正確,我會提前道歉。
import os
import time
import serial
from w1thermsensor import W1ThermSensor
os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')
#---------------------------------------------------------
# Define the function to convert Celsius to Fahrenheit
#---------------------------------------------------------
def CelsiusToFahrenheit(TempCelsius):
TempFahrenheit = ((TempCelsius*9)/5) + 32
return TempFahrenheit
#----------------------------------------------------------
# Define function to Average Outside Temperature in Fahrenheit
#----------------------------------------------------------
def OutsideTempAvg(A, B):
OutsideTemp = (A + B)/2
return OutsideTemp
#----------------------------------------------------------
# Set Pointer to W1ThermSensor object
#----------------------------------------------------------
TmpSensor = W1ThermSensor()
#----------------------------------------------------------
# Define Sensors by ID
#----------------------------------------------------------
Fsensor = '03079779c963'
Rsensor = '03159779fe5a'
Isensor = '030797799182'
#----------------------------------------------------------
# Loop Through Available Sensors Identify and Assign
#----------------------------------------------------------
while True:
for TmpSensor in W1ThermSensor.get_available_sensors():
CurSensorID = TmpSensor.id
CurTempC = round(float(TmpSensor.get_temperature()),1)
if CurSensorID == Fsensor:
FtempC = CurTempC
elif CurSensorID == Rsensor:
RtempC = CurTempC
elif CurSensorID == Isensor:
ItempC = CurTempC
else:
print("Unexpected Sensor = " + CurSensorID)
print("Temp = " + str(FtempC))
print("Temp = " + str(RtempC))
print("Temp = " + str(ItempC))
#----------------------------------------------------------------
# Average and Convert Celsius to Fahrenheit
#----------------------------------------------------------------
OtempC = round(float(OutsideTempAvg(FtempC, RtempC)))
OtempF = round(float(CelsiusToFahrenheit(OtempC)))
FtempF = round(float(CelsiusToFahrenheit(FtempC)))
RtempF = round(float(CelsiusToFahrenheit(RtempC)))
ItempF = round(float(CelsiusToFahrenheit(ItempC)))
#-----------------------------------------------------------------
# Print for testing - Final will be sent to HMI display over Serial
#------------------------------------------------------------------
print("Outside Temperature = " + str(OtempF) + " Fahrenheit")
print("Inside Temperature = " + str(ItempF) + " Fahrenheit")
#---------------------------------------------------------------------
# Reset time - Final will be 5 minutes
#----------------------------------------------------------------------
time.sleep(5.0)
我希望能夠打印來自每個傳感器的 C 和 F 讀數以及其中兩個(Fsensor 和 Rsensor)的平均值。 最終我會將結果從 Pi 的串行接口發送到 HMI LCD。
我認為你有縮進的問題:
while True:
for sensor in W1ThermSensor.get_available_sensors():
if some_condition:
pass
elif some_other_condition:
pass
else: # unreal case just to handle all possible cases
print('this is not printed when everything is ok')
calculcate1() # this function is called only if above is printed!
calculate2() # <-- move all calculation to the same level as "for" loop.
邊注:
你是完全正確的,這是我想出的。
while True:
for TmpSensor in W1ThermSensor.get_available_sensors():
CurSensorID = TmpSensor.id
CurTempC = round(float(TmpSensor.get_temperature()),1)
CurTempF = round(float(TmpSensor.get_temperature(W1ThermSensor.DEGREES_F)),1)
if CurSensorID == Fsensor:
FtempC = CurTempC
FtempF = CurTempF
# print("F-Temp = " + str(FtempC) + " C" + ", " + str(FtempF) + " F")
elif CurSensorID == Rsensor:
RtempC = CurTempC
RtempF = CurTempF
# print("R-Temp = " + str(RtempC) + " C" + ", " + str(RtempF) + " F")
elif CurSensorID == Isensor:
ItempC = CurTempC
ItempF = round(float(CurTempF))
# print("I-Temp = " + str(ItempC) + " C" + ", " + str(ItempF) + " F")
else:
print("Unexpected Sensor = " + CurSensorID)
#----------------------------------------------------------------
# Average and Convert Celsius to Fahrenheit
#----------------------------------------------------------------
OtempC = round(float(OutsideTempAvg(FtempC, RtempC)))
OtempF = round(float(OutsideTempAvg(FtempF, RtempF)))
#-----------------------------------------------------------------
# Print for testing - Final will be sent to HMI display over Serial
#------------------------------------------------------------------
print("Outside Temperature = " + str(OtempF) + " Fahrenheit")
print("Inside Temperature = " + str(ItempF) + " Fahrenheit")
#---------------------------------------------------------------------
# Reset time - Final will be 5 minutes
#----------------------------------------------------------------------
time.sleep(60.0)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.