首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试arduino gps

测试arduino gps
EN

Stack Overflow用户
提问于 2015-03-16 20:51:30
回答 1查看 556关注 0票数 0

我和我的一个朋友正在建造一个机器人,它包含了arduino的gps。我们构建了以下电路来测试gps:

我们尝试使用以下代码来测试gps:

代码语言:javascript
复制
#include <SoftwareSerial.h>
#include <TinyGPS.h>

long lat,lon; // create variable for latitude and longitude object

SoftwareSerial gpsSerial(2, 3); // create gps sensor connection
TinyGPS gps; // create gps object

void setup(){
  Serial.begin(9600); // connect serial
  gpsSerial.begin(4800); // connect gps sensor
}

void loop(){
  Serial.print("test");     //I implemented this test
  while(gpsSerial.available()){ // check for gps data
    Serial.print("test2");     //I implemented this test
   if(gps.encode(gpsSerial.read())){ // encode gps data
     Serial.print("test3");       //I implemented this test
    gps.get_position(&lat,&lon); // get latitude and longitude
    // display position
    Serial.print("Position: ");
    Serial.print("lat: ");Serial.print(lat);Serial.print(" ");// print latitude
    Serial.print("lon: ");Serial.println(lon); // print longitude
   }
  }
}

问题是,串行监视器确实输出了测试编号1,但没有输出测试编号2和3。因此,我们预计我们构建的电路会失败。但我们仔细检查了电线等,有人知道问题出在哪里吗?

欢迎任何灵感/帮助,

谢谢,

Justin van Til

EN

回答 1

Stack Overflow用户

发布于 2016-01-27 17:47:22

试试这段代码。

代码语言:javascript
复制
#include <SoftwareSerial.h>    
#include <TinyGPS.h>    
TinyGPS gps;          

static void print_long(long val, long invalid, int len, int prec);          
static void print_int(unsigned long val, unsigned long invalid, int len);      
static void print_date(TinyGPS &gps);                                          
static void print_str(const char *str, int len);                                

SoftwareSerial ss(3,4);

void setup()
{
  Serial.begin(9600);       
  ss.begin(9600);        
 }

void loop()
{

  long lat, lon;
  int alt;

  unsigned short sentences = 0, failed = 0;
  gps.get_position(&lat, &lon);
  alt=gps.altitude();

  Serial.print("CURRENT LATITUDE & LONGITUDE:");
  Serial.print(lat);
  Serial.print(",");
  Serial.println(lon);
  Serial.print("CURRENT ALTITUDE:");
  Serial.println(alt);
  smartdelay(1000); 
}


static void smartdelay(unsigned long ms)
{
  unsigned long start = millis();
  do 
  {
    while (ss.available())
      gps.encode(ss.read());
  } while (millis() - start < ms);
}

static void print_long (long val, long invalid, int len, int prec)  
{
  if (val == invalid)
  {
    while (len-- > 1)
      Serial.print('*');
    Serial.print(' ');
  }
  else
  {
    Serial.print(val, prec);
    int vi = abs((int)val);
    int flen = prec + (val < 0.0 ? 2 : 1); // . and -
    flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;
    for (int i=flen; i<len; ++i)
      Serial.print(' ');
  }
  smartdelay(0);
}


static void print_int(unsigned long val, unsigned long invalid, int len)
{
  char sz[32];
  if (val == invalid)
    strcpy(sz, "*******");
  else
    sprintf(sz, "%ld", val);
  sz[len] = 0;
  for (int i=strlen(sz); i<len; ++i)
    sz[i] = ' ';
  if (len > 0) 
    sz[len-1] = ' ';
  Serial.print(sz);
  smartdelay(0);
}
static void print_str(const char *str, int len)
{
  int slen = strlen(str);
  for (int i=0; i<len; ++i)
    Serial.print(i<slen ? str[i] : ' ');
  smartdelay(0);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29077279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档