[email protected] 发表于 2013-7-31 16:39:55

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

本帖最后由 [email protected] 于 2013-7-31 16:43 编辑

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

这是模块的样子。。。

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


String data="";
int mark = 0;
boolean Mark_Start=false;
boolean valid=false;
String GGAUTCtime,GGAlatitude,GGAlongitude,GPStatus,SatelliteNum,HDOPfactor,Height,
PositionValid,RMCUTCtime,RMClatitude,RMClongitude,Speed,Direction,Date,Declination,Mode;
void setup(){
Serial.begin(9600);
Serial1.begin(38400);
Serial.println(0);
delay(1000);
}

void loop(){
while (Serial1.available()> 0){
    if(Mark_Start){
      data=reader();
      Serial.println(data);
      if(data.equals("GPGGA")){
      //Serial.println(1);
      GGAUTCtime=reader();
      GGAlatitude=reader();
      GGAlatitude+=reader();
      GGAlongitude=reader();
      GGAlongitude+=reader();
      GPStatus=reader();
      SatelliteNum=reader();
      HDOPfactor=reader();
      Height=reader();
      Mark_Start=false;
      valid=true;
      data="";

      }
      else if(data.equals("GPGSA")){
      Serial.println(2);
      Mark_Start=false;
      data="";
      }
      else if(data.equals("GPGSV")){
      Serial.println(3);
      Mark_Start=false;
      data="";
      }
      else if(data.equals("GPRMC")){
      //Serial.println(4);
      RMCUTCtime=reader();
      PositionValid=reader();
      RMClatitude=reader();
      RMClatitude+=reader();
      RMClongitude=reader();
      RMClongitude+=reader();
      Speed=reader();
      Direction=reader();
      Date=reader();
      Declination=reader();
      Declination+=reader();
      Mode=reader();
      valid=true;
      Mark_Start=false;
      data="";
      }
      else if(data.equals("GPVTG")){
      Serial.println(5);
      Mark_Start=false;
      data="";
      }
      else{
      Serial.println(6);
      Mark_Start=false;
      data="";
      }
    }
    if(valid){
      if(PositionValid=="A"){
      Serial.println("Position Valid");
      }
      else{
      Serial.println("Your position is not valid.");
      }
      Serial.print("Date:");
      Serial.println(Date);
      Serial.print("UTCtime:");
      Serial.print(RMCUTCtime);
      Serial.print("   ");
      Serial.println(GGAUTCtime);
      Serial.print("Latitude:");
      Serial.print(RMClatitude);
      Serial.print("   ");
      Serial.println(GGAlatitude);
      Serial.print("Longitude:");
      Serial.print(RMClongitude);
      Serial.print("   ");
      Serial.println(GGAlongitude);
      Serial.print("GPStatus:");
      Serial.println(GPStatus);
      Serial.print("SatelliteNum:");
      Serial.println(SatelliteNum);
      Serial.print("HDOPfactor:");
      Serial.println(HDOPfactor);
      Serial.print("Height:");
      Serial.println(Height);
      Serial.print("Speed:");
      Serial.println(Speed);
      Serial.print("Direction:");
      Serial.println(Direction);
      Serial.print("Declination:");
      Serial.println(Declination);
      Serial.print("Mode:");
      Serial.println(Mode);   
      valid=false;
    }
    if(Serial1.find("$")){
      Serial.println("capture");
      Mark_Start=true;
    }
}

}

String reader(){
String value="";
int temp;
startover:
while (Serial1.available() > 0){
    delay(2);
    temp=Serial1.read();
    if((temp==',')||(temp=='*')){
      if(value.length()){
      //Serial.println("meaningful message");
      return value;
      }
      else {
      //Serial.println("empty");
      return "";
      }   
    }
    else if(temp=='$'){
      //Serial.println("failure");
      Mark_Start=false;
    }
    else{
      //Serial.println("add");
      value+=char(temp);
    }
}
while (!(Serial1.available()>0)){
}
goto startover;
}

wing 发表于 2013-7-31 21:17:59

这个够简单,值得赞赏,就是不知道这个模块价格如何〉?

swim 发表于 2013-7-31 21:35:49

GPS基本都是串口的吧,是标准格式不

[email protected] 发表于 2013-7-31 21:46:21

swim 发表于 2013-7-31 21:35 static/image/common/back.gif
GPS基本都是串口的吧,是标准格式不

这么一说好像也是诶,我是按标准格式编的。

学慧放弃 发表于 2013-8-1 12:03:15

好简单!不知道定位精度怎样??

拾瑞 发表于 2013-8-1 12:17:53

UBLOX-6低端的,淘宝65元左右!定位精度2.5M,最大刷新5HZ,可以TTL,可以I2C........

darkorigin 发表于 2013-8-2 17:14:40

拾瑞 发表于 2013-8-1 12:17 static/image/common/back.gif
UBLOX-6低端的,淘宝65元左右!定位精度2.5M,最大刷新5HZ,可以TTL,可以I2C........

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

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

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

天天向上/tp 发表于 2013-11-9 12:24:59

编译没通过sketch_nov09b:9: error: 'Serial1' was not declared in this scope

maxims 发表于 2013-11-9 12:29:57

天天向上/tp 发表于 2013-11-9 12:24
编译没通过sketch_nov09b:9: error: 'Serial1' was not declared in this scope

请去掉那个1字再试

天天向上/tp 发表于 2013-11-9 15:52:43

maxims 发表于 2013-11-9 12:29 static/image/common/back.gif
请去掉那个1字再试

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

maxims 发表于 2013-11-10 17:06:10

下载程序的时候,你得裸板下载,不能接上外设。

[email protected] 发表于 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
感恩不尽

[email protected] 发表于 2013-12-4 15:47:27

残影飞雪 发表于 2013-12-2 14:54 static/image/common/back.gif
请问楼主,我的也是NEO-6MV2,就是无法读取到数据,接点后定位成功后绿色LED闪烁,但是就是无法读取数据,...

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

残影飞雪 发表于 2013-12-9 09:16:00

[email protected] 发表于 2013-12-4 15:47 static/image/common/back.gif
你试试不用我这个程序,直接通过串口读取模块试试,可能是版本不同,程序把你的数据过滤掉了?

是之前的GPS模块有问题,我更换新的GPS模块就OK了
页: [1] 2
查看完整版本: ATK-NEO-6M GPS模块的Arduino 基础驱动