首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Arduino中解析Adafruit Ultimate GPS

在Arduino中解析Adafruit Ultimate GPS
EN

Stack Overflow用户
提问于 2020-09-21 16:30:45
回答 1查看 88关注 0票数 0

我是新手在Arduino编程,我有一个相当的问题,这是保存我的新的Adafruit终极GPS突破的经度和纬度值。我正在使用网站上给出的教程,然后我尝试在库中应用解析代码,打开File→Examples→Adafruit_GPS→parsing草图并将其上传到Arduino。然后打开串行监视器。我在我的串行监视器中得到了结果,如附件所示(我在下面的快照中突出显示了我的问题)

我正在尝试将我的位置值保存在度数中,该度数在串行监视器中显示为位置(度数,适用于Google地图):32.5011,44.4499

显示结果的标准代码的一部分是:

代码语言:javascript
复制
Serial.print("\nTime: ");
    Serial.print(GPS.hour, DEC); Serial.print(':');
    Serial.print(GPS.minute, DEC); Serial.print(':');
    Serial.print(GPS.seconds, DEC); Serial.print('.');
    Serial.println(GPS.milliseconds);
    Serial.print("Date: ");
    Serial.print(GPS.day, DEC); Serial.print('/');
    Serial.print(GPS.month, DEC); Serial.print("/20");
    Serial.println(GPS.year, DEC);
    Serial.print("Fix: "); Serial.print((int)GPS.fix);
    Serial.print(" quality: "); Serial.println((int)GPS.fixquality);
    if (GPS.fix) {
      Serial.print("Location: ");
      Serial.print(GPS.latitude, 4); Serial.print(GPS.lat);
      Serial.print(", ");
      Serial.print(GPS.longitude, 4); Serial.println(GPS.lon);
      Serial.print("Location (in degrees, works with Google Maps): ");
      Serial.print(GPS.latitudeDegrees, 4);
      Serial.print(", ");
      Serial.println(GPS.longitudeDegrees, 4);
      Serial.print("Speed (knots): "); Serial.println(GPS.speed);
      Serial.print("Angle: "); Serial.println(GPS.angle);
      Serial.print("Altitude: "); Serial.println(GPS.altitude);
      Serial.print("Satellites: "); Serial.println((int)GPS.satellites);

结果如下所示

接下来,我尝试定义2个变量,以便通过在Serial.println(GPS.longitudeDegrees,4)后面添加简单代码来复制经度和纬度值;如下所示

代码语言:javascript
复制
Serial.print("Location (in degrees, works with Google Maps): ");
      Serial.print(GPS.latitudeDegrees, 4);
      Serial.print(", ");
      Serial.println(GPS.longitudeDegrees, 4);
      lat1= (GPS.latitudeDegrees, 4);
      lon1=(GPS.longitudeDegrees, 4);
      Serial.println (lat1);
      Serial.println (lon1);
      delay (500);

然后我在串行监视器中的lat1和lon1值中只得到了数字4

然后,我编辑代码,删除其中的数字4,如下所示

代码语言:javascript
复制
Serial.print("Location (in degrees, works with Google Maps): ");
  Serial.print(GPS.latitudeDegrees, 4);
  Serial.print(", ");
  Serial.println(GPS.longitudeDegrees, 4);
  lat1= GPS.latitudeDegrees;
  lon1=GPS.longitudeDegrees;
  Serial.println (lat1);
  Serial.println (lon1);
  delay (500);

然后我只得到了点32.5011→32.50 44.4499→44.45后面的2个数字,如下面的附件所示

所以我问我如何在我的lon1和lat1中保存完整的数字,因为我需要这些数字用于进一步的分析。我试着将lon1,lat1定义为浮点数,双精度,但仍然是同样的问题只有2个数字,我得到了所有的感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-21 18:22:21

浮点数的小数位数是无限的。当您打印它们时,它将只打印2,除非您使用第二个参数指定要打印多少。

例如:

代码语言:javascript
复制
float x = 67.1234

Serial.print(x); // will print 67.12
Serial.print(x,3); // will print 67.123
Serial.print(x, 4); // will print 67.1234
Serial.print(x,6);  // will print 67.123400

所以你所看到的就是你告诉它打印的地方有多少。但是变量总是有整数和无限个小数位。

现在,对于Arduino上的浮点数,只有前6或7个小数位是准确的。但是数字本身在小数点后有无限位数,如果你想打印它们的话。

还要注意,第二个参数只在print语句中执行某些操作。很多人会尝试这样做:

代码语言:javascript
复制
float x = 67.1234 , 2;

认为这将以某种方式保存一个只有2位精度的数字,但事实并非如此。在这种情况下,它只会保存数字2。正如您在实验中看到的那样。这就是逗号操作符的工作方式。只有在print函数中才能指定。同样,实际数字本身有无限多个可以打印的小数位。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63988707

复制
相关文章

相似问题

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