我目前正在建立一个小的GPS盒子,该盒子应该跟踪我的位置并将完整的NMEA句子写到sd卡中。(之后我想在我的电脑上解析它)我正在使用Arduino Nano和NEO-6M GPS Module来获取数据。
有效:从模块获取NMEA数据,写入SD卡。通过Serial.write将数据输出到串行输出可以正常工作。
现在,我有一个问题,似乎Arduino无法足够快地将数据写入SD卡并无法与GPS模块同步。偶尔会产生这样的事情:$G3,3,09,32,20,248,*4D
我对如何解决此问题有一些想法:1.更快地写入数据2.始终等待数据完全写入后再获取下一个修复程序3.每隔一秒钟写入一次GPS定位4.首先,写入缓冲区,然后一次进入SD卡
我尝试实现这些功能,但是每次都失败(对不起,我是新来的。)>
这是我当前的代码:
#include <SoftwareSerial.h>
#include <SPI.h>
#include <SD.h>
SoftwareSerial GPS_Serial(4, 3); // GPS Module’s TX to D4 & RX to D3
File GPS_File;
int NBR = 1; //file number
void setup() {
Serial.begin(9600);
GPS_Serial.begin(9600);
SD.begin(5);
//write data to a new file
bool rn = false;
while (rn == false) {
if (SD.exists(String(NBR) + ".txt")) {
NBR = NBR + 1;
}
else {
GPS_File = SD.open(String(NBR) + ".txt", FILE_WRITE);
GPS_File.write("START\n");
GPS_File.close();
rn = true;
}
}
}
void loop() {
GPS_File = SD.open(String(NBR) + ".txt", FILE_WRITE);
while (GPS_Serial.available() > 0) {
GPS_File.write((byte)GPS_Serial.read());
}
GPS_File.close();
}
我目前正在建立一个小的GPS盒子,该盒子应该跟踪我的位置并将完整的NMEA句子写到sd卡中。 (我想稍后在我的电脑上解析它)我正在使用Arduino Nano和...
[尝试了不同的方法后,我决定将其降低到最基本的水平。没有任何奇特的编码或缓冲区,我现在仅将数据直接写入SD卡并每15秒刷新一次,这样就有可能丢失多达15秒的数据,即在切割时会丢失15个GPS定位点(每秒1个)关闭电源。