OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3504|回复: 11

用GPS输出具体地点信息时,能不能用*dtbuf直接与经纬度坐标比较判断位置区间?下面是编写的主程序

[复制链接]

1

主题

12

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2016-1-2
在线时间
5 小时
发表于 2016-1-18 09:55:16 | 显示全部楼层 |阅读模式
2金钱
[size=10.5000pt]u8 USART1_TX_BUF[USART2_MAX_RECV_LEN]; [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]//串口1,发送缓存区
[size=10.5000pt]nmea_msg gpsx; [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]//GPS信息
[size=10.5000pt]__align(4) u8 dtbuf[50];
[size=10.5000pt]__align(4) u8 dtbuf1[50];   [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]//打印缓存器
[size=10.5000pt]__align(4) u8 dtbuf2[50];
[size=10.5000pt]const u8*fixmode_tbl[4]={"Fail","Fail"," 2D "," 3D "};[size=10.5000pt]        [size=10.5000pt]//fix mode字符串
[size=10.5000pt]        [size=10.5000pt]  
[size=10.5000pt]//显示GPS定位信息
[size=10.5000pt]void Gps_Msg_Show(void)
[size=10.5000pt]{
[size=10.5000pt] [size=10.5000pt]        [size=10.5000pt]float tp;[size=10.5000pt]        [size=10.5000pt]        
[size=10.5000pt]        [size=10.5000pt]POINT_COLOR=BLUE;  [size=10.5000pt]        [size=10.5000pt]
[size=10.5000pt]        [size=10.5000pt]tp=gpsx.longitude;[size=10.5000pt]        [size=10.5000pt]   
[size=10.5000pt]        [size=10.5000pt]sprintf((char *)dtbuf1,"%.5f",tp/=100000,gpsx.ewhemi);[size=10.5000pt]        [size=10.5000pt]//得到经度字符串
[size=10.5000pt]  LCD_ShowString(30,130,200,16,16,dtbuf1);[size=10.5000pt]        
[size=10.5000pt]        [size=10.5000pt]printf("经度为%s\n",dtbuf1);[size=10.5000pt]        [size=10.5000pt]  [size=10.5000pt]        
[size=10.5000pt]        [size=10.5000pt]tp=gpsx.latitude;[size=10.5000pt]        [size=10.5000pt]   
[size=10.5000pt]        [size=10.5000pt]sprintf((char *)dtbuf2,"%.5f",tp/=100000,gpsx.nshemi);[size=10.5000pt]        [size=10.5000pt]//得到纬度字符串
[size=10.5000pt]        [size=10.5000pt]LCD_ShowString(30,150,200,16,16,dtbuf2);[size=10.5000pt]        
[size=10.5000pt]        [size=10.5000pt]printf("纬度为%s\n",dtbuf2);
[size=10.5000pt]        [size=10.5000pt]if ((*dtbuf1>119.23581)&&(*dtbuf1<119.51134)&&(*dtbuf2>39.99999)&&(*dtbuf2<40.12231))
[size=10.5000pt]        [size=10.5000pt] {
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]printf("艺院体育场\n");
[size=10.5000pt]        [size=10.5000pt] }
[size=10.5000pt]        
[size=10.5000pt]        [size=10.5000pt]        [size=10.5000pt]if((*dtbuf1>119.51134)&&(*dtbuf1<119.51356)&&(*dtbuf2>39.42235)&&(*dtbuf2<39.99999))
[size=10.5000pt]
[size=10.5000pt]        [size=10.5000pt]{  
[size=10.5000pt]        [size=10.5000pt]printf("8组团\n");
[size=10.5000pt]        [size=10.5000pt]}

最佳答案

查看完整内容[请看2#楼]

你的这个数据里面装的是字符串,不好直接转化。写一个小函数吧。 float c_f_change(char *buf)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

20

主题

468

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1684
金钱
1684
注册时间
2014-2-25
在线时间
230 小时
发表于 2016-1-18 09:55:17 | 显示全部楼层
你的这个数据里面装的是字符串,不好直接转化。写一个小函数吧。 float  c_f_change(char *buf)
回复

使用道具 举报

7

主题

47

帖子

0

精华

高级会员

Rank: 4

积分
655
金钱
655
注册时间
2015-1-25
在线时间
139 小时
发表于 2016-1-18 09:56:59 | 显示全部楼层
如果定位准确的话应该是可以的吧
回复

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2016-1-2
在线时间
5 小时
 楼主| 发表于 2016-1-18 10:02:46 | 显示全部楼层
tangafu 发表于 2016-1-18 09:56
如果定位准确的话应该是可以的吧

定位是准确的,但是输不出正确的位置信息,是不是dtbuf的类型不能直接和数值型比较呢
if ((*dtbuf1>119.23581)&&(*dtbuf1<119.51134)&&(*dtbuf2>39.99999)&&(*dtbuf2<40.12231))
{
printf("艺院体育场\n");
回复

使用道具 举报

20

主题

468

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1684
金钱
1684
注册时间
2014-2-25
在线时间
230 小时
发表于 2016-1-18 12:33:04 | 显示全部楼层
*dtbuf1先强制转换一下
回复

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2016-1-2
在线时间
5 小时
 楼主| 发表于 2016-1-18 15:45:34 | 显示全部楼层
1201yuge 发表于 2016-1-18 12:33
*dtbuf1先强制转换一下

怎么强制转换啊
回复

使用道具 举报

20

主题

468

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1684
金钱
1684
注册时间
2014-2-25
在线时间
230 小时
发表于 2016-1-18 16:22:12 | 显示全部楼层
*dtbuf1指向的数据是怎么样子的?
回复

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2016-1-2
在线时间
5 小时
 楼主| 发表于 2016-1-18 16:33:52 | 显示全部楼层
1201yuge 发表于 2016-1-18 16:22
*dtbuf1指向的数据是怎么样子的?

__align(4) u8 dtbuf[50];
__align(4) u8 dtbuf1[50];                                  
__align(4) u8 dtbuf2[50];
这是定义

精读为119.51274
纬度为39.90289
这是串口助手显示的
理论上应该显示具体地点 就是无法实现
回复

使用道具 举报

27

主题

711

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
12573
金钱
12573
注册时间
2015-11-5
在线时间
2151 小时
发表于 2016-1-18 18:13:43 | 显示全部楼层
GPS模块输出的经纬度是“度分”格式的,一定要转换成统一的“度”格式才能在地图上显示正确的坐标
拿来长岛冰茶换我半晚安睡
回复

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2016-1-2
在线时间
5 小时
 楼主| 发表于 2016-1-18 20:06:12 | 显示全部楼层
1201yuge 发表于 2016-1-18 17:47
你的这个数据里面装的是字符串,不好直接转化。写一个小函数吧。 float  c_f_change(char *buf)

[mw_shl_code=c,true]u8 USART1_TX_BUF[USART2_MAX_RECV_LEN];                                         //串口1,发送缓存区
nmea_msg gpsx;                                                                                         //GPS信息
__align(4) u8 dtbuf[50];
__align(4) u8 dtbuf1[50];                                                                   //打印缓存器
__align(4) u8 dtbuf2[50];
const u8*fixmode_tbl[4]={"Fail","Fail"," 2D "," 3D "};        //fix mode字符串
          
//显示GPS定位信息
void Gps_Msg_Show(void)
{
        float tp;               
        POINT_COLOR=BLUE;           
        tp=gpsx.longitude;          
        sprintf((char *)dtbuf1,"%.5f",tp/=100000,gpsx.ewhemi);        //得到经度字符串
  LCD_ShowString(30,130,200,16,16,dtbuf1);       
        printf("经度为%s\n",dtbuf1);                 
        tp=gpsx.latitude;          
        sprintf((char *)dtbuf2,"%.5f",tp/=100000,gpsx.nshemi);        //得到纬度字符串
        LCD_ShowString(30,150,200,16,16,dtbuf2);       
        printf("纬度为%s\n",dtbuf2);
        if ((*dtbuf1>11930.5805)&&(*dtbuf1<11930.7407)&&(*dtbuf2>3954.6001)&&(*dtbuf2<3954.7992))
         {
                printf("艺院体育场\n");
         }
       
                if((*dtbuf1>119.51134)&&(*dtbuf1<119.51356)&&(*dtbuf2>39.42235)&&(*dtbuf2<39.99999))

        {  
        printf("第8组团\n");
        }
        tp=gpsx.altitude;          
        sprintf((char *)dtbuf,"Altitude:%.1fm     ",tp/=10);        //得到高度字符串
        LCD_ShowString(30,170,200,16,16,dtbuf);                  
        tp=gpsx.speed;          
        sprintf((char *)dtbuf,"Speed:%.3fkm/h     ",tp/=1000);                                    //得到速度字符串         
        LCD_ShowString(30,190,200,16,16,dtbuf);                                             
        if(gpsx.fixmode<=3)                                                                                                                //定位状态
        {  
                sprintf((char *)dtbuf,"Fix Mode:%s",fixmode_tbl[gpsx.fixmode]);       
                  LCD_ShowString(30,210,200,16,16,dtbuf);                          
        }                   
        sprintf((char *)dtbuf,"Valid satellite:%02d",gpsx.posslnum);                         //用于定位的卫星数
        LCD_ShowString(30,230,200,16,16,dtbuf);            
        sprintf((char *)dtbuf,"Visible satellite:%02d",gpsx.svnum%100);                         //可见卫星数
        LCD_ShowString(30,250,200,16,16,dtbuf);                 
        sprintf((char *)dtbuf,"UTC Date:%04d/%02d/%02d   ",gpsx.utc.year,gpsx.utc.month,gpsx.utc.date);        //显示UTC日期
        //printf("year2:%d\r\n",gpsx.utc.year);
        LCD_ShowString(30,270,200,16,16,dtbuf);                    
        sprintf((char *)dtbuf,"UTC Time:%02d:%02d:%02d   ",gpsx.utc.hour,gpsx.utc.min,gpsx.utc.sec);        //显示UTC时间
          LCD_ShowString(30,290,200,16,16,dtbuf);                  
}         [/mw_shl_code]
回复

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2016-1-2
在线时间
5 小时
 楼主| 发表于 2016-1-18 20:07:42 | 显示全部楼层
1201yuge 发表于 2016-1-18 17:47
你的这个数据里面装的是字符串,不好直接转化。写一个小函数吧。 float  c_f_change(char *buf)

楼上是语句代码 具体怎么改呢 弄了一天了 焦头烂额 试了各种方法
回复

使用道具 举报

20

主题

468

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1684
金钱
1684
注册时间
2014-2-25
在线时间
230 小时
发表于 2016-1-18 20:47:19 | 显示全部楼层
夕颜 发表于 2016-1-18 20:07
楼上是语句代码 具体怎么改呢 弄了一天了 焦头烂额 试了各种方法

就是ASCII码转化
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 15:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表