Arduino UNO单片机解析农芯科技移动站f发出的GPRMC格式报文的经度、纬度和前进速度的程序.
时间: 2023-07-14 15:13:50 浏览: 86
下面是Arduino UNO单片机解析农芯科技移动站发出的GPRMC格式报文的经度、纬度和前进速度的程序:
```c++
#include <SoftwareSerial.h>
SoftwareSerial gpsSerial(2, 3); // RX, TX
void setup() {
Serial.begin(9600);
gpsSerial.begin(9600);
}
void loop() {
if (gpsSerial.available()) {
String gprmc = gpsSerial.readStringUntil('\n');
if (gprmc.startsWith("$GPRMC")) {
int commaIndex = gprmc.indexOf(",", 1);
float latitude = getLatitude(gprmc.substring(commaIndex + 1));
commaIndex = gprmc.indexOf(",", commaIndex + 1);
float longitude = getLongitude(gprmc.substring(commaIndex + 1));
commaIndex = gprmc.indexOf(",", commaIndex + 1);
float speed = getSpeed(gprmc.substring(commaIndex + 1));
Serial.print("Latitude: ");
Serial.println(latitude, 6);
Serial.print("Longitude: ");
Serial.println(longitude, 6);
Serial.print("Speed: ");
Serial.println(speed);
}
}
}
float getLatitude(String lat) {
int degree = lat.substring(0, 2).toInt();
float minute = lat.substring(2).toFloat();
return degree + minute / 60;
}
float getLongitude(String lon) {
int degree = lon.substring(0, 3).toInt();
float minute = lon.substring(3).toFloat();
return degree + minute / 60;
}
float getSpeed(String speed) {
return speed.toFloat() * 0.514444; // knots to meters per second
}
```
这个程序中,我们使用了一个软串口(SoftwareSerial)来连接GPS模块和Arduino UNO单片机。在setup()函数中,我们初始化了Serial和gpsSerial。在loop()函数中,我们首先检查gpsSerial是否有可用的数据,如果有,我们就读取一行数据。如果这行数据是GPRMC格式的,我们就解析出其中的经度、纬度和前进速度,并输出到串口。
解析经度和纬度的函数getLatitude()和getLongitude()非常简单,它们分别将度和分转换为浮点数,并计算出总的经度或纬度值。
解析前进速度的函数getSpeed()也很简单,它将节点(knots)转换为米每秒(m/s)。
请注意,这个程序假设GPS模块已经正确配置,并且在发送GPRMC格式报文。如果你的GPS模块不是这样配置的,或者不发送GPRMC格式报文,请修改程序以适应你的情况。
阅读全文