有没有更好的方法来平均两个温度传感器的输入?

2024-10-01 00:33:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我在为我的车做一个顶置控制台。我想用两个温度传感器的平均读数来显示外面的温度。我目前正在使用蒂莫的图书馆,并能够检索温度从每个传感器。当我尝试平均或转换temp时,当我运行代码时,除了闪烁的光标外,什么都不会发生。我对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。你知道吗


Tags: toimport语句floatprintfahrenheitstrround
2条回答

你完全正确,这是我的想法。你知道吗

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)

我想你对缩进有意见:

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永远不会被初始化。为了解决这个问题,只需提前创建变量。你知道吗

相关问题 更多 >