В настоящее время я строю небольшую коробку GPS, которая должна отслеживать мое местоположение и записывать полное предложение NMEA на SD-карту.
(я хочу потом проанализировать его на моем p c)
Я использую Arduino Nano и NEO-6M GPS-модуль для получения данных.
Что работает: получение данных NMEA из модуля, запись на SD-карту.
Вывод данных на последовательный выход через Serial.write работает нормально.
Теперь у меня проблема в том, что Arduino не может записать данные достаточно быстро на SD-карту и выполнить десинхронизацию с помощью GPS модуль. Иногда это приводит к следующим вещам: $G3,3,09,32,20,248,*4D
У меня есть несколько идей, как это исправить:
1. Пишите данные быстрее
2. Всегда ждите, пока данные будут полностью записаны, прежде чем получать следующее исправление
3. только запись каждого второго GPS-исправления
4. сначала запись в буфер, а затем одним go на 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();
}