极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 52400|回复: 24

ATK-NEO-6M GPS模块的Arduino 基础驱动

[复制链接]
发表于 2013-7-31 16:39:55 | 显示全部楼层 |阅读模式
本帖最后由 [email protected] 于 2013-7-31 16:43 编辑

代码还不够精简但是基础功能已经实现,希望能够提供改进意见。
之后会继续更新,为了方便,放了一份在github上。
这里隔三差五也会更新。

这是模块的样子。。。

由于直接是串口连接也没有什么接线图


  1. String data="";
  2. int mark = 0;
  3. boolean Mark_Start=false;
  4. boolean valid=false;
  5. String GGAUTCtime,GGAlatitude,GGAlongitude,GPStatus,SatelliteNum,HDOPfactor,Height,
  6. PositionValid,RMCUTCtime,RMClatitude,RMClongitude,Speed,Direction,Date,Declination,Mode;
  7. void setup(){
  8.   Serial.begin(9600);
  9.   Serial1.begin(38400);
  10.   Serial.println(0);
  11.   delay(1000);
  12. }

  13. void loop(){
  14.   while (Serial1.available()> 0){
  15.     if(Mark_Start){
  16.       data=reader();
  17.       Serial.println(data);
  18.       if(data.equals("GPGGA")){
  19.         //Serial.println(1);
  20.         GGAUTCtime=reader();
  21.         GGAlatitude=reader();
  22.         GGAlatitude+=reader();
  23.         GGAlongitude=reader();
  24.         GGAlongitude+=reader();
  25.         GPStatus=reader();
  26.         SatelliteNum=reader();
  27.         HDOPfactor=reader();
  28.         Height=reader();
  29.         Mark_Start=false;
  30.         valid=true;
  31.         data="";

  32.       }
  33.       else if(data.equals("GPGSA")){
  34.         Serial.println(2);
  35.         Mark_Start=false;
  36.         data="";
  37.       }
  38.       else if(data.equals("GPGSV")){
  39.         Serial.println(3);
  40.         Mark_Start=false;
  41.         data="";
  42.       }
  43.       else if(data.equals("GPRMC")){
  44.         //Serial.println(4);
  45.         RMCUTCtime=reader();
  46.         PositionValid=reader();
  47.         RMClatitude=reader();
  48.         RMClatitude+=reader();
  49.         RMClongitude=reader();
  50.         RMClongitude+=reader();
  51.         Speed=reader();
  52.         Direction=reader();
  53.         Date=reader();
  54.         Declination=reader();
  55.         Declination+=reader();
  56.         Mode=reader();
  57.         valid=true;
  58.         Mark_Start=false;
  59.         data="";
  60.       }
  61.       else if(data.equals("GPVTG")){
  62.         Serial.println(5);
  63.         Mark_Start=false;
  64.         data="";
  65.       }
  66.       else{
  67.         Serial.println(6);
  68.         Mark_Start=false;
  69.         data="";
  70.       }
  71.     }
  72.     if(valid){
  73.       if(PositionValid=="A"){
  74.         Serial.println("Position Valid");
  75.       }
  76.       else{
  77.         Serial.println("Your position is not valid.");
  78.       }
  79.       Serial.print("Date:");
  80.       Serial.println(Date);
  81.       Serial.print("UTCtime:");
  82.       Serial.print(RMCUTCtime);
  83.       Serial.print("   ");
  84.       Serial.println(GGAUTCtime);
  85.       Serial.print("Latitude:");
  86.       Serial.print(RMClatitude);
  87.       Serial.print("   ");
  88.       Serial.println(GGAlatitude);
  89.       Serial.print("Longitude:");
  90.       Serial.print(RMClongitude);
  91.       Serial.print("   ");
  92.       Serial.println(GGAlongitude);
  93.       Serial.print("GPStatus:");
  94.       Serial.println(GPStatus);
  95.       Serial.print("SatelliteNum:");
  96.       Serial.println(SatelliteNum);
  97.       Serial.print("HDOPfactor:");
  98.       Serial.println(HDOPfactor);
  99.       Serial.print("Height:");
  100.       Serial.println(Height);
  101.       Serial.print("Speed:");
  102.       Serial.println(Speed);
  103.       Serial.print("Direction:");
  104.       Serial.println(Direction);
  105.       Serial.print("Declination:");
  106.       Serial.println(Declination);
  107.       Serial.print("Mode:");
  108.       Serial.println(Mode);     
  109.       valid=false;
  110.     }
  111.     if(Serial1.find("$")){
  112.       Serial.println("capture");
  113.       Mark_Start=true;
  114.     }
  115.   }

  116. }

  117. String reader(){
  118.   String value="";
  119.   int temp;
  120. startover:
  121.   while (Serial1.available() > 0){
  122.     delay(2);
  123.     temp=Serial1.read();
  124.     if((temp==',')||(temp=='*')){
  125.       if(value.length()){
  126.         //Serial.println("meaningful message");
  127.         return value;
  128.       }
  129.       else {
  130.         //Serial.println("empty");
  131.         return "";
  132.       }     
  133.     }
  134.     else if(temp=='$'){
  135.       //Serial.println("failure");
  136.       Mark_Start=false;
  137.     }
  138.     else{
  139.       //Serial.println("add");
  140.       value+=char(temp);
  141.     }
  142.   }
  143.   while (!(Serial1.available()>0)){
  144.   }
  145.   goto startover;
  146. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2013-7-31 21:17:59 | 显示全部楼层
这个够简单,值得赞赏,就是不知道这个模块价格如何〉?
回复 支持 反对

使用道具 举报

发表于 2013-7-31 21:35:49 | 显示全部楼层
GPS基本都是串口的吧,是标准格式不
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-31 21:46:21 | 显示全部楼层
swim 发表于 2013-7-31 21:35
GPS基本都是串口的吧,是标准格式不

这么一说好像也是诶,我是按标准格式编的。
回复 支持 反对

使用道具 举报

发表于 2013-8-1 12:03:15 | 显示全部楼层
好简单!不知道定位精度怎样??
回复 支持 反对

使用道具 举报

发表于 2013-8-1 12:17:53 | 显示全部楼层
UBLOX-6低端的,淘宝65元左右!定位精度2.5M,最大刷新5HZ,可以TTL,可以I2C........
回复 支持 反对

使用道具 举报

发表于 2013-8-2 17:14:40 | 显示全部楼层
拾瑞 发表于 2013-8-1 12:17
UBLOX-6低端的,淘宝65元左右!定位精度2.5M,最大刷新5HZ,可以TTL,可以I2C........

这个价位做到这么一个精度 确实不错了
不过实际使用估计这个精度很难达到吧

之前用过几个成品的蓝牙GPS 刷新也只有1HZ左右, 实际使用感觉精度估计在10M.

连接电脑或者手机 主要是蓝牙虚拟成串行通讯 最大号称可同时追踪22颗星(其实这个感觉意义不大,实际使用中 除非在海拔很高的高山的山顶 否则15颗星的可能性都不会很大) 我长期只能保持4-5颗星(可能是我在城市里的缘故吧,但是即便在街头也只有不到10颗星能达到足够的信号强度)
回复 支持 反对

使用道具 举报

发表于 2013-11-9 12:24:59 | 显示全部楼层
编译没通过sketch_nov09b:9: error: 'Serial1' was not declared in this scope
回复 支持 反对

使用道具 举报

发表于 2013-11-9 12:29:57 来自手机 | 显示全部楼层
天天向上/tp 发表于 2013-11-9 12:24
编译没通过sketch_nov09b:9: error: 'Serial1' was not declared in this scope

请去掉那个1字再试
回复 支持 反对

使用道具 举报

发表于 2013-11-9 15:52:43 | 显示全部楼层
maxims 发表于 2013-11-9 12:29
请去掉那个1字再试

只有一路串口,编译可以通过,但是下载程序的时候串口冲突
avrdude: stk500_getsync(): not in sync: resp=0x00
回复 支持 反对

使用道具 举报

发表于 2013-11-10 17:06:10 | 显示全部楼层
下载程序的时候,你得裸板下载,不能接上外设。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-28 18:26:22 | 显示全部楼层
这。。我是mega 2560用的。直接走serial1,上传时就不用拆下来了。
回复 支持 反对

使用道具 举报

发表于 2013-12-2 14:54:23 | 显示全部楼层
本帖最后由 残影飞雪 于 2013-12-2 14:56 编辑

请问楼主,我的也是NEO-6MV2,就是无法读取到数据,接点后定位成功后绿色LED闪烁,但是就是无法读取数据, 2礼拜了,先开始以为接线不实,后来尝试N次,查阅N多资料都不行,接电无任何返回。
本人QQ:657584105
感恩不尽
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-4 15:47:27 | 显示全部楼层
残影飞雪 发表于 2013-12-2 14:54
请问楼主,我的也是NEO-6MV2,就是无法读取到数据,接点后定位成功后绿色LED闪烁,但是就是无法读取数据,  ...

你试试不用我这个程序,直接通过串口读取模块试试,可能是版本不同,程序把你的数据过滤掉了?
回复 支持 反对

使用道具 举报

发表于 2013-12-9 09:16:00 | 显示全部楼层
[email protected] 发表于 2013-12-4 15:47
你试试不用我这个程序,直接通过串口读取模块试试,可能是版本不同,程序把你的数据过滤掉了?


是之前的GPS模块有问题,我更换新的GPS模块就OK了
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-27 01:53 , Processed in 0.044604 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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