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

时间:2014-03-12 19:38:05

标签: encoding gps arduino sd-card

我有一个草图从EM-406a GPS接收器获取信息(Lat,Long)并将信息写入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();
}

当程序执行完毕后,当我打开SD卡上的文件时,我收到一条消息,说明它有编码错误。

Arduino error

我现在在里面(并且无法获得GPS信号,因此0),但是需要解决编码问题,并且应该有与设备已经开启的秒数一样多的线路。只有一个。我需要做些什么才能使这里的事情正常工作?

1 个答案:

答案 0 :(得分:0)

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

你确定gps.location.lat()和gps.location.lng()返回字符串,而不是整数或浮点数吗?这将解释二进制数据和&#34;编码错误&#34;你看。