极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12996|回复: 4

求助arduino接ublox neo-6MGPS

[复制链接]
发表于 2014-1-8 20:31:57 | 显示全部楼层 |阅读模式
为什么用串口调试打开9600波特率没有读数啊?求教
连接:
arduino     GPS
3.3V           VCC
RX              TX
GND           GND
代码:
  1. #include <Arduino.h>
  2.         char Latitude[10];
  3.         char Latitude_N_or_S;

  4.         char Longitude[11];
  5.         char Longitude_E_or_W;

  6.         char Altitude[4];

  7.         char Speed[5];


  8.         char Uart_Buffer;
  9.         char GPS_COM[6];                        //存放当前GPS指令名称,例如:$GPGGA
  10.         //char RX_GPGGA_Buffer[80];
  11.         char RX_GPRMC_Buffer[80];
  12.        
  13.         unsigned char RX_Count;
  14.         bool Flag_GPGGA_OK;
  15.         bool Flag_GPRMC_OK;
  16.         bool Flag_GPS_OK;

  17. void setup()
  18. {        Flag_GPGGA_OK = 0;
  19.         RX_Count = 0;
  20.         Uart_Buffer = 0;
  21.         Serial.begin(9600);                        //设置波特率9600和GPS模块一致
  22.                
  23. }

  24. void loop()
  25. {
  26.         unsigned char i = 0;
  27.         while(Serial.available() > 0)
  28.         {               
  29.                 Uart_Buffer = Serial.read();        //获取GPS信息
  30.                 //Serial.write(Uart_Buffer);                        //测试使用

  31.                 if(Uart_Buffer == '$')
  32.                 {
  33.                         RX_Count = 0;
  34.                         //Flag_GPS_OK = 0;
  35.                 }
  36.                
  37.                 if(RX_Count < 6)
  38.                 {
  39.                         GPS_COM[RX_Count++] = Uart_Buffer;
  40.                 }

  41.                 else if( GPS_COM[0] == '$' && GPS_COM[1] == 'G'&& GPS_COM[2] == 'P'&& GPS_COM[3] == 'R'&& GPS_COM[4] == 'M'&& GPS_COM[5] == 'C' )        //获取GPRMC数据
  42.                 {
  43.                         RX_GPRMC_Buffer[RX_Count] = Uart_Buffer;
  44.                         if(RX_GPRMC_Buffer[RX_Count] == '\n')
  45.                         {
  46.                                 Flag_GPRMC_OK = 1;
  47.                                
  48.                         }
  49.                         else
  50.                         {
  51.                                 RX_Count++;
  52.                         }                       
  53.                 }
  54.                 else if( GPS_COM[0] == '$' && GPS_COM[1] == 'G'&& GPS_COM[2] == 'P'&& GPS_COM[3] == 'G'&& GPS_COM[4] == 'L'&& GPS_COM[5] == 'L' )        //获取GPGLL数据
  55.                 {
  56.                         if(Uart_Buffer == '\n')
  57.                         {
  58.                                 Flag_GPS_OK = 1;                                                        //一组数据都是最后一帧是GPGLL,接收完GPGLL说明接收数据完成               
  59.                         }
  60.                 }
  61.                

  62.         }

  63.         if(Flag_GPS_OK == 1)
  64.         {
  65.                 Flag_GPS_OK = 0;
  66.                 Serial.print("**\n");
  67.                 if(Flag_GPGGA_OK == 1)
  68.                 {


  69.                 }

  70.                 if(Flag_GPRMC_OK == 1)
  71.                 {
  72.                         Serial.print("Latitude: ");
  73.                         Latitude_N_or_S = RX_GPRMC_Buffer[30];                                        //纬度
  74.                         Serial.print(Latitude_N_or_S);
  75.                         Serial.print(" ");
  76.                         for(i = 0;i<10;i++)
  77.                         {
  78.                                 //if(i==4) continue;
  79.                                 Latitude[i]=RX_GPRMC_Buffer[19+i];
  80.                                 Serial.print(Latitude[i]);
  81.                         }
  82.                         Serial.print("\n");



  83.                         Serial.print("Longitude: ");
  84.                         Longitude_E_or_W = RX_GPRMC_Buffer[44];                                        //经度
  85.                         Serial.print(Longitude_E_or_W);
  86.                         Serial.print(" ");
  87.                         for(i = 0;i<11;i++)
  88.                         {
  89.                                 //if(i==6) continue;
  90.                                 Longitude[i]=RX_GPRMC_Buffer[32+i];
  91.                                 Serial.print(Longitude[i]);
  92.                         }
  93.                         Serial.print("\n");

  94.                                                        
  95.                         Serial.print("Speed: ");        //速度
  96.                         for(i=0;i<5;i++)
  97.                         {
  98.                                 Speed[i]=RX_GPRMC_Buffer[46+i];
  99.                                 Serial.print(Speed[i]);
  100.                         }
  101.                         Serial.print(" m/s");
  102.                         Serial.print("\n");                       
  103.                 }



  104.         }
  105. }
复制代码
回复

使用道具 举报

发表于 2014-1-8 20:52:23 | 显示全部楼层
1.确认不上gps的时候能否工作正常
2.gps是不是占用你的串口了?
回复 支持 反对

使用道具 举报

发表于 2014-12-25 20:39:42 | 显示全部楼层
你好,问题解决了吗?我也遇到了这个问题,请指点一下
回复 支持 反对

使用道具 举报

发表于 2014-12-25 20:56:55 | 显示全部楼层
78-82为什么是空语句?
回复 支持 反对

使用道具 举报

发表于 2014-12-25 21:55:35 | 显示全部楼层
1、单独把GPS模块通过usb-ttl连接起来,电脑用串口软件应该能读到数据。
2、把GPS和Arduino连接起来,Arduino必须用软串口,硬件0-1引脚被系统占用了的。
3、如果还不行,请交换一下GPS连到Arduino的TX-RX引线。

Ps:不论GPS是否有信号,它都会输出一些固定格式的信息。
Pss:请一定注意波特率的问题。
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-16 22:37 , Processed in 0.054692 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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