在 Arduino 中解析 A​​dafruit Ultimate GPS

Parsing Adafruit Ultimate GPS in Arduino

我是 Arduino 编程的新手,我有一个很大的问题,那就是保存我的新 Adafruit Ultimate GPS Breakout 的经度和纬度值。我正在使用网站上提供的教程然后我尝试在库中应用解析代码 打开文件→示例→Adafruit_GPS→解析草图并将其上传到Arduino。然后打开串行监视器。 我在我的串行监视器中得到了附件中显示的结果(我在下面的快照中突出显示了我的问题)

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

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

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) 之后添加简单代码来复制经度和纬度值;如下图

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 来编辑代码,如下所示

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);

然后我只得到点后的2个数字 32.5011 → 32.50 44.4499 → 44.45 如下附件所示 所以我问我如何将完整的数字保存在我的 lon1 和 lat1 中,因为我需要这些数字进行进一步分析 顺便说一句,我试图将 lon1、lat1 定义为 float、double 并且仍然是同样的问题,我得到的数字后只有 2 个数字 谢谢大家

浮点数有无限多的小数位。当您打印它们时,除非您使用第二个参数指定要打印的数量,否则它只会打印 2。

例如:

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 位小数是准确的。但是如果你想打印它们,数字本身在小数点后有无限多位数字。

另请注意,第二个参数仅在打印语句中执行某些操作。很多人会尝试这样做:

float x = 67.1234 , 2;

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