本帖最后由 爱在南方 于 2017-5-7 13:09 编辑
串口打印不出来,好心塞呀。我用keil调试,程序运行结果是可以的,但是用串口打印结果时,却一直给我打印出nan,有木有人遇过类似情况,可否指点一下,不甚感激呀。。。
以下是我写的GPS模块采点程序,求指点
void Data_gather(void)
{
unsigned char i=0,j=0,k=0;
float long
titude_sum=0,latitude_sum=0;
float S_lon=0,S_la=0,Sum_lon=0,Sum_la=0;
float longtitude_aver=0,latitude_aver=0; //取均值
flag_ok=0;
if(Save_Data.isParseData==true&&Save_Data.isUsefull==true)
{
//考虑到测一点时,度是不会变的,所以只对分计算
//先采集
longtitude[pos_collect]=(Save_Data.longitude[3]-0x30)*10+(Save_Data.longitude[4]-0x30)*1+(Save_Data.longitude[6]-0x30)*0.1+(Save_Data.longitude[7]-0x30)*0.01+(Save_Data.longitude[8]-0x30)*0.001+(Save_Data.longitude[9]-0x30)*0.0001;
latitude[pos_collect]=(Save_Data.latitude[2]-0x30)*10+(Save_Data.latitude[3]-0x30)+(Save_Data.latitude[5]-0x30)*0.1+(Save_Data.latitude[6]-0x30)*0.01+(Save_Data.latitude[7]-0x30)*0.001+(Save_Data.latitude[8]-0x30)*0.0001+0.0000000;
pos_collect++;
if(pos_collect>199) //采集完成,滤波,拉伊达准则
{
pos_collect=0;
//求均值
for(i=0;i<200;i++)
{
longtitude_sum+=longtitude
;
latitude_sum+=latitude;
}
longtitude_aver=longtitude_sum/200;
latitude_aver=latitude_sum/200;
//求方差S
for(i=0;i<200;i++)
{
Sum_lon+=(longtitude-longtitude_aver)*(longtitude-longtitude_aver);
Sum_la+=(latitude-latitude_aver)*(latitude-latitude_aver);
}
Sum_lon=Sum_lon/199;
Sum_la=Sum_la/199;
S_lon=sqrt(Sum_lon);
S_la=sqrt(Sum_la);
//判断数据是否异常
for(i=0;i<200;i++)
{
if(longtitude>3*S_lon)
{
longtitude=0;
}
if(latitude>3*S_la)
{
latitude=0;
}
}
//处理完毕,求均值
longtitude_sum=0;
latitude_sum=0;
for(i=0;i<200;i++)
{
if(longtitude!=0)
{
j++;
longtitude=(int)(longtitude*10000);//扩大10000倍,取整减小误差
longtitude_sum+=longtitude;
}
if(latitude!=0)
{
k++;
latitude=(int)(latitude*10000);//扩大10000倍,取整减小误差
latitude_sum+=latitude;
}
}
longtitude_aver=longtitude_sum/(j*10000);
latitude_aver=latitude_sum/(k*10000);
//存入数组
Pos_longtitude[num_postion]=longtitude_aver;
Pos_latitude[num_postion]=latitude_aver;
printf("jingdu=%f",Pos_longtitude[num_postion]);
printf("
");
printf("weidu=%f",Pos_longtitude[num_postion]);
printf("
"); //串口打印
num_postion=num_postion+1;
flag_ok=1;
}
}
}
一周热门 更多>