Arduino未将完整的NMEA语句写入SD卡文件

问题描述 投票:0回答:1

我目前正在建立一个小的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和...

arduino gps sd-card nmea software-serial
1个回答
0
投票

[尝试了不同的方法后,我决定将其降低到最基本的水平。没有任何奇特的编码或缓冲区,我现在仅将数据直接写入SD卡并每15秒刷新一次,这样就有可能丢失多达15秒的数据,即在切割时会丢失15个GPS定位点(每秒1个)关闭电源。

© www.soinside.com 2019 - 2024. All rights reserved.