簡體   English   中英

有沒有更好的方法來平均兩個溫度傳感器輸入?

[英]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.

邊注:

  • Python 允許您隨時初始化變量,但您有責任在訪問之前初始化變量! 想象 Rsensor 在“for”循環中不可用,您的 RtempC 將永遠不會被初始化。 為了解決它 - 只需提前創建變量。

你是完全正確的,這是我想出的。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM