我使用Serial连接到我的Arduino UNO(GPS TX-> UNO RX [Pin 0])的GP-635T GPS模块。
然后我只读取输入数据字节的字节,在读取时将它们添加到字符串中,当我到达换行符时(13)我只打印完整的数据字符串并重置数据字符串以进行下一次运行。
代码:
void setup()
{
Serial.begin(9600);
Serial.println("Initialized Serial port..");
}
String data = "";
void loop()
{
while(Serial.available())
{
char gpsByte = Serial.read();// Read a byte from the GPS
data += gpsByte;
if(gpsByte == 13){
Serial.print(data);
data = "";
}
}
delay(100);
}
此代码按原样运行。但这里的问题是我得到的数据。
模块使用NMEA-0183标准以1Hz打印出多个数据线。我不知道它是如何决定打印什么的,因为数据对于(几乎)完整数据集的超过5个“打印”不一致。
例如:
$GPGGA,213948.00,,,,,0,00,99.99,,,,,,*63
$GPGSA,A30 <--- A30?
$GPGSV,1,1,01,29,,,30*70
$GPGLL,,,,,213948.00,V,N*4F
$GPRMC,213949.00,V,,,,,,,290314,,,N*74
$GPVTG,,,,,,,,,N*30
$GPGGA,213949.00,,,,,0,00,99.99,,,,,,*62
$GPGSA,A,1,,,,PGSV,1,1,01,29,,,30*70 <--- PGSV?
$GPGLL,,,,,213949.00,V,N*4E
$GPRMC,213950.00,V,,,,,,,290314,,,N*7C
$GPVTG,,,,,,,,,N*30
$GPGGA,213950.00,,,,,0,00,99.99,,,,,,*6A
...
$GPGGA,214045SA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
$GPGSV,1,1,01,29,,,30*70$GPRMC,214046.00,V,,,,,,,290314,,,N*75 <--- Missing linebreak?
$GPVTG,,,,,,,,,N*30
$G00,99.99,,,,,,*63 <--- $G00??
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
$GPGSV,1,1,02,20,,,27,29,,,30*74
$GPGLL,$GPRMC,214047.00,V,,,,,,,290314,,,N*74 <--- Missing data?
$GPVTG,,,,,,,,,N*30
$GPGGA,214047.00,,,,,0,00,99.99,,,,,,*62
$,99.99*30 <--- Alot of missing data
我认为你明白了,我只有GPS连接到Arduino。 我尝试过使用无线模块无线发送数据,但没有任何变化。 我尝试过使用AltSoftSerial和SoftwareSerial,但后者的数据更加混乱。 我尝试了不同的波特率,没有运气。
有没有人知道为什么会这样?该模块是全新的,我不知道它为什么会这样。
注意:我家里没有一个非常好的GPS信号到我的模块,我确实试着去外面看看我是否可以从大约3颗卫星那里得到一个信号,但是没有改变输出。
答案 0 :(得分:0)
这是一个非常奇怪的问题,当我将延迟从100ms缩短到10ms时,问题确实消失了。 它可能必须对缓冲区做一些事情,也许它在我开始从它读取字节之前就会溢出。
但是,如果其他人遇到同样的问题,请缩短循环延迟,你应该没问题!