我有一个草图从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卡上的文件时,我收到一条消息,说明它有编码错误。
我现在在里面(并且无法获得GPS信号,因此0),但是需要解决编码问题,并且应该有与设备已经开启的秒数一样多的线路。只有一个。我需要做些什么才能使这里的事情正常工作?
答案 0 :(得分:0)
在循环中关闭文件,永不重新打开,这就是文件中只有一组数据的原因。
你确定gps.location.lat()和gps.location.lng()返回字符串,而不是整数或浮点数吗?这将解释二进制数据和&#34;编码错误&#34;你看。