串口接收数据转换成double型
//检测逗号位置的函数,buf是需要检测的字符串,cx是要检测第几个逗号
u8 NMEA_Comma_Pos(u8 *buf,u8 cx)
{ u8 *p=buf;while(cx){ if(*buf==',')cx--;buf++;if(*buf=='*'||*buf<' '||*buf>'z')return 0XFF;//遇到‘*’,和非法字符就返回0xff}return buf-p;
}//m^n函数
//返回值:m^n
u32 NMEA_Pow(u8 m,u8 n)
{u32 result=1; while(n--)result*=m; return result;
}//str转换位数字,以‘,’或者‘*’结束
//buf:str存储区
//dx:小数点位数,返回给调用函数
//返回值:转换位长整形
int NMEA_Str2num(u8 *buf,u8*dx)
{u8 *p=buf;u32 ires=0,fres=0;u8 ilen=0,flen=0,i;u8 mask=0;int res;while(1) //得到整数和小数的长度{if(*p=='-'){mask|=0X02;p++;}//是负数if(*p==','||(*p=='*'))break;//遇到‘,’或者‘*’结束if(*p=='.'){mask|=0X01;p++;}//遇到小数点else if(*p>'9'||(*p<'0')) //有非法字符{ ilen=0;flen=0;break;} if(mask&0X01)flen++;else ilen++;p++;}if(mask&0X02)buf++; //去掉负号for(i=0;i<ilen;i++) //得到整数部分数据{ ires+=NMEA_Pow(10,ilen-1-i)*(buf[i]-'0');}if(flen>5)flen=5; //最多取5位小数*dx=flen; //小数点位数for(i=0;i<flen;i++) //得到小数部分数据{ fres+=NMEA_Pow(10,flen-1-i)*(buf[ilen+1+i]-'0');} res=ires*NMEA_Pow(10,flen)+fres;if(mask&0X02)res=-res; return res;
} //数据解析
void Analysis(u8 *buf)
{u8 *p1,dx; u8 posx; long int temp; float rs; p1=(u8*)strstr((const char *)buf,"ZCPOS"); //判断字符串ZCPOS是否是buf的子串,不是就返回空posx=NMEA_Comma_Pos(p1,1); //返回字符串第一个逗号的位置if(posx!=0XFF){temp=NMEA_Str2num(p1+posx,&dx); //返回整数和,逗号在字符串的位置12.33 则temp=1233,dx=2 GPS_lat =(double) temp/NMEA_Pow(10,dx); }posx=NMEA_Comma_Pos(p1,2); // 返回字符串第二个逗号的位置if(posx!=0XFF){temp=NMEA_Str2num(p1+posx,&dx); GPS_long = (double)temp/NMEA_Pow(10,dx); }posx=NMEA_Comma_Pos(p1,3); // 返回字符串第三个逗号的位置if(posx!=0XFF){temp=NMEA_Str2num(p1+posx,&dx); GPS_direction=(double)temp/NMEA_Pow(10,dx);}
}
举例:*buf = {“ZCPOS,123.56,789.23,546.72,”}
得到:GPS_lat = 123.56 GPS_long = 789.23 GPS_direction=564.72
串口接收数据转换成double型相关推荐
- LabVIEW系列—将串口二进制数据转换成ASCII字符
接下来就一步一步地解决以上两个问题: 1.LabVIEW中,字符控件显示字符有4种方式:正常显示,'\'代码显示,密码显示,十六进制显示.如下图所示. 下图是LabVIEW的help的ASCII码对照 ...
- python double转int_如何将int转换成double
展开全部 将int转换成double可以使用强制62616964757a686964616fe59b9ee7ad9431333431353431类型转换.自动类型转换两种方式. 1.强制类型转换 强制 ...
- 将串口接收的数据绘制成波形图(使用matlab或Visual Scope)
一. 串口通信配置 结合stm32固件库(或其它类型单片机)中usart相关的函数,配置好串口通信的寄存器,确定(数据位.停止位.波特率等等),本文主要介绍两种方法将采集到的串口数据绘制成波形图. 二 ...
- 串口接收到的字符型数据如何转化成数字
串口接收到的字符型数据转化成数字: k = USART_RXBuff[3]-0x30; 或者: k = USART_RXBuff[3]-'0';
- Arduino 从串口接收到的数据中提取整型数据(parseInt)
Arduino 从串口接收到的数据中提取整型数据(parseInt) 函数说明 parseInt函数可用于从设备接收到的数据中寻找整数数值. 该函数属于Stream类.该函数可被Stream类的子类所 ...
- java 把char转换成int型,java如何把char型数据转换成int型数据(转)
一字符串,String="2324234535": 把第i个数取出来时是char型的:char temp=String.charAt(i) 如何把char型转换成int型? 我需要 ...
- C语言 字符串转换成int、long和double型
#include <stdio.h> #include <stdlib.h> #define LENGTH 128int main(void){char str[LENGTH] ...
- linux 串口 lsr 0xc9,串口发送0x0D后,从串口接收到数据被转换成了0x0A
如题,在追踪串口中断接收字符接口UART_getc() 到底层,其调用的是 typedef int32_t (*UART_ReadPollingFxn) (UART_Handle ...
- UART0串口编程(六):串口(UART0)之UC/OS(二)UC/OS下的串口接收任务编程
串口(UART0)之UC/OS(二) 一.串口接收数据在UC/OS设计中应注意的问题 1. 串口通信的数据接收过程: 1> UART 接收FIFO接收到预定字节后触发中断 2> ...
最新文章
- MogileFS高级应用(二)最后有疑问
- 如何以类似JSON的格式打印圆形结构?
- html多条件检索折叠,八种方式实现多条件匹配
- 近乎于“妖”!浅谈《山海镜花》的美术风格与设计
- linux之lsof和netstat判断端口(port)被哪些应用占用
- Wireshark个人实战总结
- 【LeetCode】剑指 Offer 10- I. 斐波那契数列
- spark学习-54-Spark RDD的clean()方法
- Linux之web服务
- Atitit mvc框架的实现 目录 1.1. class MvcCtrol {	1 1.2. MvcFilter	1 1.3. MvcUtil	2 /springboothelloword/sr
- 设计和实现一款轻量级的爬虫框架
- 服务器误删除虚拟机数据恢复成功
- python教程马哥_【60集全】全新马哥教育 运维必备python基础语法全讲解_IT教程网...
- ubuntu提示根目录存储空间不足的解决办法
- 面向大数据的分布式调度
- 4种超好用的PS调色小技巧,知道的人不多!
- Ajax洗洁精的特性,洗涤剂中常用表面活性剂的特点
- 视频文件头解析--wma
- 【在线笔试题解题报告系列】Google APAC 2017 University Test Round B
- 高通batterydata电池曲线数据学习
热门文章
- bzoj2127 happiness 最小割
- bzoj3203 [Sdoi2013]保护出题人 凸包+二分
- 2017.4.22 hankson的趣味题 思考记录
- win7为什么打开桌面上的计算机很卡很慢,Win7系统运行不流畅卡半天才进入桌面的六种解决方法...
- 打开stl文件_介绍一种修复、查看以及打印STL三维模型文件的工具
- 网络互连与互联网知识点笔记(五)---路由器技术
- python十进制转化为二进制_十进制转化为二进制的Python 3.2 代码
- [转]在Windows server 2012上部署DPM 2012 SP1 RTM之安装配置
- SpringBoot面试题及答案整理
- UIButton的几种触发方式