#include <stdio.h>
#include <stdint.h>
#include <math.h>
uint16_t bumaqufan(uint16_t buma);
float tempchoose(uint16_t *tempbuf);
uint16_t temp2[4]={0xff79,0xff7A,0x125};
#define TempDiff 4
int main() {
printf("ret:%f\r\n",tempchoose(temp2));
return 0;
}
uint16_t bumaqufan(uint16_t buma)
{
int yuanma=0;
yuanma= ~buma;//按位取反
if (yuanma&0x80)//符号位不变
{
yuanma &= 0xef;
}
else
{
yuanma |= 0x80;
}
yuanma++;//取反后+1
printf("源码%d\r\n",yuanma);
return yuanma;
}
float tempchoose(uint16_t *tempbuf)
{
float temp[4]={0};
float differ[3]={0};
int cnt=3;
for(int i=0;i<3;i++)
{
if(tempbuf[i]>0x1000)
{
tempbuf[i]=bumaqufan(tempbuf[i]);
temp[i]=-tempbuf[i]*0.1f;
// printf("yuanma%d ",temp2[i]);
}
else
temp[i]=tempbuf[i]*0.1f;
}
for(int i=0;i<3;i++)
printf("temp[%d]:%f ",i,temp[i]);
differ[0]=temp[0]-temp[1];
differ[1]=temp[0]-temp[2];
differ[2]=temp[1]-temp[2];
for(int i=0;i<3;i++)
printf("differ[%d]:%f ",i,fabsf(differ[i]));
printf("\r\n");
if((fabsf(differ[0])>TempDiff&&fabsf(differ[1])>TempDiff)&&fabsf(differ[2])>TempDiff)
printf("All wrong\r\n");
else if(fabsf(differ[0])>TempDiff)
{
printf("here1\r\n");
if(fabsf(differ[1])<TempDiff)
{
printf("here11\r\n");
temp[1]=0;
cnt=cnt-1;
}
else if(fabsf(differ[2])<TempDiff)
{
printf("here12\r\n");
temp[0]=0;
cnt=cnt-1;
}
}
else if(fabsf(differ[1])>TempDiff)
{
printf("here2\r\n");
if(fabsf(differ[0])<TempDiff)
{
printf("here21\r\n");
temp[2]=0;
cnt=cnt-1;
}
else if(fabsf(differ[2])<TempDiff)
{
printf("here22\r\n");
temp[0]=0;
cnt=cnt-1;
}
}
else if(fabsf(differ[2])>TempDiff)
{
printf("here3\r\n");
if(fabsf(differ[0])<TempDiff)
{
printf("here31\r\n");
temp[2]=0;
cnt=cnt-1;
}
else if(fabsf(differ[1])<TempDiff)
{
printf("here32\r\n");
temp[1]=0;
cnt=cnt-1;
}
}
for(int i=0;i<3;i++)
printf("temp[%d]:%f ",i,temp[i]);
printf("\r\n");
temp[3]=(temp[0]+temp[1]+temp[2])/cnt;
printf("temp%f,cnt%d\r\n",temp[3],cnt);
return temp[3];
}
三个温度求平均值并剔除错误温度 温度传感器补码 原码转换(仅自用)
最新推荐文章于 2024-05-16 02:38:01 发布
![](https://img-home.csdnimg.cn/images/20240709112858.png)