arduino uno如何读取导航发送的gpgga和gprmc交替格式中的GPRMC格式的经度、维度和速度稳定获取的程序
时间: 2023-11-28 14:51:24 浏览: 128
要读取GPRMC格式的经度、纬度和速度,你需要使用Arduino Uno的串口读取功能,并对收到的GPS数据进行解析。
以下是一个基本的示例程序,可以读取GPS模坐板发送的GPRMC格式数据,并从中提取出经度、纬度和速度等信息:
```
#include <SoftwareSerial.h>
SoftwareSerial gpsSerial(2, 3); // RX, TX
void setup() {
Serial.begin(9600);
gpsSerial.begin(9600);
}
void loop() {
// 读取GPS数据
while (gpsSerial.available() > 0) {
// 读取一行数据
String gpsData = gpsSerial.readStringUntil('\n');
// 检查是否是GPRMC格式数据
if (gpsData.indexOf("$GPRMC") != -1) {
// 分割数据
String parts[13];
int i = 0;
while (gpsData.indexOf(",") != -1) {
int commaIndex = gpsData.indexOf(",");
parts[i] = gpsData.substring(0, commaIndex);
gpsData = gpsData.substring(commaIndex + 1);
i++;
}
parts[i] = gpsData;
// 提取经度、纬度和速度等信息
if (parts[2] == "A") { // 信号有效
float latitude = (parts[3].substring(0, 2).toFloat() + parts[3].substring(2).toFloat() / 60) * (parts[4] == "N" ? 1 : -1);
float longitude = (parts[5].substring(0, 3).toFloat() + parts[5].substring(3).toFloat() / 60) * (parts[6] == "E" ? 1 : -1);
float speed = parts[7].toFloat();
// 输出信息
Serial.print("Latitude: ");
Serial.println(latitude, 6);
Serial.print("Longitude: ");
Serial.println(longitude, 6);
Serial.print("Speed: ");
Serial.println(speed, 2);
}
}
}
}
```
上述程序使用SoftwareSerial库创建了一个串口对象,用于与GPS模块进行通信。在`setup()`函数中,我们初始化了两个串口对象,分别用于与电脑进行通信(9600波特率)和与GPS模块进行通信(也是9600波特率)。
在`loop()`函数中,我们使用`gpsSerial.available()`函数检查是否有GPS数据可供读取。如果有,我们读取一行数据,并检查是否为GPRMC格式数据。如果是,我们使用逗号分割数据,然后提取经度、纬度和速度等信息。
最后,我们将提取的信息打印到电脑串口上,以便进行调试和测试。你也可以根据需要对程序进行修改,以便将信息输出到LCD屏幕或其他设备上。
阅读全文