📄 hum.c
字号:
#include <avr/pgmspace.h>
#include <math.h>
#include "flash_table.h"
int CalcTemp(long ResValue)
{
unsigned char i;
volatile long tTemp;
volatile long t0,t1,tt;
for(i=0;i<29;i++)
{
t1 = pgm_read_dword(R + i);
if(ResValue > t1)
{
break;
}
}
t0 = pgm_read_dword(R + i-1);
tt = pgm_read_dword(T + i);
tTemp= tt;
tTemp=tTemp -(ResValue-t1)*50 /(t0-t1);
return(tTemp);
}
//tRes 湿敏电阻值,真实值乘以100再代入
int CalcHumity(int tTemp,long tRes)
{
volatile unsigned char i,j;
int tLogRes;
volatile int r0,r1,r2,r3,h0,r4;
tLogRes = (log10((double)tRes)-2)*1000;
//寻找温度范围,比如13度在10-15度之间,此时i应等于3 .表示3*5=15;
for(i=1;i<10;i++)
{
if(tTemp <= (5*i))
break;
}
if(i >=10) //温度大于表中最大温度45度
{
tTemp = 45;
i = 9;
}
//寻找湿度所在区间,比如20%-30%区间。j = 0 表示湿度小于20% j=1表示湿度小于30%
for(j=0;j<8;j++)
{
r4= pgm_read_word(&H[i-1][j]);
if(tLogRes >= r4)
// if(tLogRes >= 0)
{
break;
}
}
//边界条件
if(j == 0) //表示电阻大于大于表中最左侧电阻阻值
{
tLogRes = pgm_read_word(&H[i-1][j]);
j = 1;
}
if(j>=8) //电阻小于表中最右侧电阻阻值
{
j = 7;
tLogRes = pgm_read_word(&H[i-1][j]);
}
if(i == 1) //温度小于表中最小温度5度
{
tTemp = 5;
i = 2;
}
r0 = pgm_read_word(&H[i-1][j]); //r0为湿度为j*10+20,温度为i*5下的电阻
r1 = pgm_read_word(&H[i-2][j]); //r1 为湿度为j*10+20,温度为(i-1)*5下的电阻
r2 = (r0-r1)*(tTemp-i*5)/5+r0; //r2为湿度为j*10+20,温度为tTemp下的电阻(log型式)
r3 = pgm_read_word(&H[i-1][j-1]); //r3为湿度为(j-1)*10+20,温度为i*5下的电阻
h0 = (tLogRes - r2)*10/(r0-r3)+j*10+20;
return h0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -