?? temperaturecalc.cpp
字號:
#include "StdAfx.h"
#include "TemperatureCalc.h"
#include <math.h>
CTemperatureCalc::CTemperatureCalc( U8 AD )
{
m_Param = GetParam( AD );
InitRtArray();
}
CTemperatureCalc::~CTemperatureCalc(void)
{
}
float CTemperatureCalc::GetTemperature2(U8 data1, U8 data2)
{
return GetTemperature( (((U16)(data1) << 8)&0xff00 ) | (data2 & 0x00FF) );
}
float CTemperatureCalc::GetTemperature(U16 data)
{
float val = (float)data;
float sample_data = (float)( (val*m_Param*11000) / ( 1.8 - val*m_Param ) );
int i = 0;
int j = 600;
float ActualTemperature = 80;//m_RtArray[1199];
{
i = 0;
j = 1201;
int t = (i+j)/2;
while (true)
{
if ( m_RtArray[t]== sample_data) break;
if ( m_RtArray[t] < sample_data)
{
i = t;
}
if( m_RtArray[t] > sample_data )
{
j = t;
}
t = (i+j)/2;
if ( i == t || j == t ) break;
}
return -40+t*0.1;
}
for( int i=0; i<600; i++, j++ )
{
if( fabs( sample_data - m_RtArray[i] ) <= 0.3 )
{
ActualTemperature =-40 + 0.1*i;// m_RtArray[i];
break;
}
if( fabs( sample_data - m_RtArray[j] ) <= 0.3 )
{
ActualTemperature = -40 + 0.1*j;//m_RtArray[j];
break;
}
}
return ActualTemperature;
}
float CTemperatureCalc::GetParam(U8 AD)
{
float val = (float)( AD & 0x00000080 ? ( 9.1838 - (float)(AD - 128)/10000 ) : ( 9.1838 + (float)AD / 10000 ) );
return (float)( 1.8/(val*1024) );
}
void CTemperatureCalc::InitRtArray()
{
float a,b,c,a0,b0,c0;
float T;
a0 = (float)( 3.90802*pow(10.0,-3) );
b0 = (float)( 5.80195*pow(10.0,-7) );
c0 = (float)( 4.27351*pow(10.0,-12) );
float fTemp = 0;
float ff = 0;
int i = 0;
float sum = 0;
float param = 0.388428;
for( T = -40; T <= 80; T += 0.1,i++ )
{
if(T < 0)
{
a=a0;
b=b0;
c=c0;
}
else
{
a=a0;
b=b0;
c=0;
}
m_RtArray[i] = (float)( 1000*(1+a*T-b*pow(T,2)-c*pow(T,3)*(T-100)) );
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -