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;
} 这个够简单,值得赞赏,就是不知道这个模块价格如何〉? GPS基本都是串口的吧,是标准格式不 swim 发表于 2013-7-31 21:35 static/image/common/back.gif
GPS基本都是串口的吧,是标准格式不
这么一说好像也是诶,我是按标准格式编的。 好简单!不知道定位精度怎样?? UBLOX-6低端的,淘宝65元左右!定位精度2.5M,最大刷新5HZ,可以TTL,可以I2C........ 拾瑞 发表于 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颗星能达到足够的信号强度) 编译没通过sketch_nov09b:9: error: 'Serial1' was not declared in this scope 天天向上/tp 发表于 2013-11-9 12:24
编译没通过sketch_nov09b:9: error: 'Serial1' was not declared in this scope
请去掉那个1字再试 maxims 发表于 2013-11-9 12:29 static/image/common/back.gif
请去掉那个1字再试
只有一路串口,编译可以通过,但是下载程序的时候串口冲突
avrdude: stk500_getsync(): not in sync: resp=0x00 下载程序的时候,你得裸板下载,不能接上外设。 这。。我是mega 2560用的。直接走serial1,上传时就不用拆下来了。 本帖最后由 残影飞雪 于 2013-12-2 14:56 编辑
请问楼主,我的也是NEO-6MV2,就是无法读取到数据,接点后定位成功后绿色LED闪烁,但是就是无法读取数据, 2礼拜了,先开始以为接线不实,后来尝试N次,查阅N多资料都不行,接电无任何返回。
本人QQ:657584105
感恩不尽 残影飞雪 发表于 2013-12-2 14:54 static/image/common/back.gif
请问楼主,我的也是NEO-6MV2,就是无法读取到数据,接点后定位成功后绿色LED闪烁,但是就是无法读取数据,...
你试试不用我这个程序,直接通过串口读取模块试试,可能是版本不同,程序把你的数据过滤掉了? [email protected] 发表于 2013-12-4 15:47 static/image/common/back.gif
你试试不用我这个程序,直接通过串口读取模块试试,可能是版本不同,程序把你的数据过滤掉了?
是之前的GPS模块有问题,我更换新的GPS模块就OK了
页:
[1]
2