我是新手在Arduino编程,我有一个相当的问题,这是保存我的新的Adafruit终极GPS突破的经度和纬度值。我正在使用网站上给出的教程,然后我尝试在库中应用解析代码,打开File→Examples→Adafruit_GPS→parsing草图并将其上传到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);然后我只得到了点32.5011→32.50 44.4499→44.45后面的2个数字,如下面的附件所示

所以我问我如何在我的lon1和lat1中保存完整的数字,因为我需要这些数字用于进一步的分析。我试着将lon1,lat1定义为浮点数,双精度,但仍然是同样的问题只有2个数字,我得到了所有的感谢。
发布于 2020-09-21 18:22:21
浮点数的小数位数是无限的。当您打印它们时,它将只打印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个小数位是准确的。但是数字本身在小数点后有无限位数,如果你想打印它们的话。
还要注意,第二个参数只在print语句中执行某些操作。很多人会尝试这样做:
float x = 67.1234 , 2;认为这将以某种方式保存一个只有2位精度的数字,但事实并非如此。在这种情况下,它只会保存数字2。正如您在实验中看到的那样。这就是逗号操作符的工作方式。只有在print函数中才能指定。同样,实际数字本身有无限多个可以打印的小数位。
https://stackoverflow.com/questions/63988707
复制相似问题