Encoding GPS输出错误写入SD卡上的文件-Arduino

Encoding GPS输出错误写入SD卡上的文件-Arduino,encoding,gps,arduino,sd-card,Encoding,Gps,Arduino,Sd Card,我有一个草图,可以从EM-406a GPS接收器中获取信息(纬度,长度),然后将信息写入Arduino护罩上的SD卡 计划如下: #include <TinyGPS++.h> #include <SoftwareSerial.h> #include <SD.h> TinyGPSPlus gps; SoftwareSerial ss(4, 3); //pins for the GPS Sd2Card card; SdVolume volume; SdFil

我有一个草图,可以从EM-406a GPS接收器中获取信息(纬度,长度),然后将信息写入Arduino护罩上的SD卡

计划如下:

#include <TinyGPS++.h>

#include <SoftwareSerial.h>

#include <SD.h>

TinyGPSPlus gps;
SoftwareSerial ss(4, 3); //pins for the GPS
Sd2Card card;
SdVolume volume;
SdFile root;
SdFile file;

void setup()
{
  Serial.begin(115200);  //for the serial output
  ss.begin(4800);  //start ss at 4800 baud
  Serial.println("gpsLogger by Aaron McRuer");
  Serial.println("based on code by Mikal Hart");
  Serial.println();
  //initialize the SD card 
  if(!card.init(SPI_FULL_SPEED, 9))
  {
    Serial.println("card.init failed"); 
  }
  //initialize a FAT volume
  if(!volume.init(&card)){
    Serial.println("volume.init failed"); 
  }
  //open the root directory
  if(!root.openRoot(&volume)){
    Serial.println("openRoot failed"); 
  }

  //create new file
  char name[] = "WRITE00.TXT";
  for (uint8_t i = 0; i < 100; i++){
    name[5] = i/10 + '0';
    name[6] = i%10 + '0';
    if(file.open(&root, name, O_CREAT | O_EXCL | O_WRITE)){
      break; 
    } 
  }
  if(!file.isOpen())
  {
    Serial.println("file.create"); 
  }
  file.print("Ready...\n");
}

void loop()
{
  bool newData = false;

  //For one second we parse GPS data and report some key values
  for (unsigned long start = millis(); millis() - start < 1000;)
  {
    while (ss.available())
    {
      char c = ss.read();
      //Serial.write(c);  //uncomment this line if you want to see the GPS data flowing
      if(gps.encode(c))  //did a new valid sentence come in?
        newData = true;
    } 
  }

  if(newData)
  {
    file.write(gps.location.lat());
    file.write("\n");
    file.write(gps.location.lng());
    file.write("\n");
  }

  file.close();
}
#包括
#包括
#包括
TinyGPSPlus gps;
软件序列ss(4,3)//GPS的别针
Sd2Card卡;
SDV体积;
SdFile根目录;
SdFile文件;
无效设置()
{
Serial.begin(115200);//用于串行输出
开始(4800);//以4800波特开始ss
连载.println(“Aaron McRuer的gpsLogger”);
Serial.println(“基于Mikal Hart的代码”);
Serial.println();
//初始化SD卡
如果(!card.init(SPI全速,9))
{
Serial.println(“card.init失败”);
}
//初始化FAT卷
if(!volume.init(&card)){
Serial.println(“volume.init失败”);
}
//打开根目录
如果(!root.openRoot(&volume)){
Serial.println(“openRoot失败”);
}
//创建新文件
字符名[]=“WRITE00.TXT”;
对于(uint8_t i=0;i<100;i++){
名称[5]=i/10+'0';
名称[6]=i%10+'0';
if(file.open(&root,name,O|u CREAT | O|u EXCL | O|u WRITE)){
打破
} 
}
如果(!file.isOpen())
{
Serial.println(“file.create”);
}
file.print(“就绪…\n”);
}
void循环()
{
bool newData=false;
//在一秒钟内,我们解析GPS数据并报告一些关键值
对于(无符号长启动=毫秒();毫秒()-启动<1000;)
{
while(ss.available())
{
char c=ss.read();
//Serial.write(c);//如果要查看GPS数据流,请取消对此行的注释
if(gps.encode(c))//是否输入了新的有效句子?
newData=true;
} 
}
如果(新数据)
{
file.write(gps.location.lat());
文件。写入(“\n”);
file.write(gps.location.lng());
文件。写入(“\n”);
}
file.close();
}
当我在程序执行完毕后打开SD卡上的文件时,我会收到一条消息,它有一个编码错误


我目前在里面(并且无法获得GPS信号,因此0),但是编码问题需要解决,并且应该有足够多的线路,只要设备已经打开几秒钟。只有那个。我需要做些什么才能使这里的工作正常?

在循环中关闭文件,而从不重新打开它,这就是文件中只有一组数据的原因


您确定gps.location.lat()和gps.location.lng()返回字符串,而不是整数或浮点吗?这就解释了二进制数据和您看到的“编码错误”。

我已经处理了编码错误(或其他错误),但即使我移动了
文件的另一个副本。打开(&root,name,O|u create | O|u EXCL | O|u WRITE)
循环
函数的头部,我仍然只得到一行。