如何把GPS的数据写入到SD卡中?
本帖最后由 godpan 于 2012-12-19 10:47 编辑现在在设计一个长期实验,需要接受GPS和Analog口的数据,并记录到SD卡里面待后进一步分析。
现时还没开始处理Analog口的数据,就已经被GPS的问题卡下来了……{:soso_e109:}
#include <SoftwareSerial.h>
SoftwareSerial gps(6,7);//RX-6;TX-7
char data;
void setup()
{
Serial.begin(9600);
gps.begin(9600);
}
void loop()
{
if(gps.available() > 0) {
data = gps.read();
Serial.print(data);
}
}
使用以上代码,可以在电脑中每隔一秒接受一条GPS信息,如:
$GPZDA,122032.000,17,12,2012,,
$GPGGA,122032.000,2301.4607,N,11305.9287,E,1,04,1.9,20.1,M,-7.3,M,,0000
$GPGLL,2301.4607,N,11305.9287,E,122032.000,A,A
$GPGSA,A,3,22,12,14,31,,,,,,,,,4.2,1.9,3.8
$GPGSV,3,1,11,22,62,324,17,12,41,065,22,14,36,332,22,31,28,247,24
$GPGSV,3,2,11,18,75,130,20,25,59,122,16,30,57,146,,21,21,190,
$GPGSV,3,3,11,24,12,040,,15,05,090,,29,04,149,
$GPRMC,122032.000,A,2301.4607,N,11305.9287,E,0.17,271.17,171212,,,A
$GPVTG,271.17,T,,M,0.17,N,0.3,K,A
但由于如果一秒一条GPS信息的话,数据量太大分析困难,但简单地在loop里面加个“delay(10000)”,则变成每隔10秒出现一个字符的情况{:soso_e149:}
请问怎么才能每隔一段时间接受所有GPS的数据(我不单只要地理位置数据),并记录到SD卡里面?
我尝试过用一些范例把GPS信息替换进去
#include <SD.h>
#include <SoftwareSerial.h>
SoftwareSerial gps(6,7);//RX-6;TX-7
char data;
const int chipSelect = 10//设定CS接口
void setup()
{
Serial.begin(9600); gps.begin(9600);
pinMode(10, OUTPUT);
}
void loop()
{
File dataFile = SD.open("datalog.txt", FILE_WRITE);
if (dataFile) {
if(gps.available() > 0)
{
data = gps.read();
dataFile.println(data);
dataFile.close();
}
}
else {
Serial.println("error opening datalog.txt");
}
}
结果虽然的确把GPS数据写进SD卡里了,但显示结果却是每行一个字符……
该怎么写才能把接受到的GPS数据每隔一段时间(如1分钟)全部都记录到SD卡里面呢?
谢谢! 用millis()来取得当前时间,2次millis();的间隔是1秒就读写数据 难道是
dataFile.println(data); 输出行
改成 dataFile.print(data); 用变量, 用SD库,有例程可看.
zzzddd9000 发表于 2012-12-18 19:46 static/image/common/back.gif
用变量, 用SD库,有例程可看.
不明白“用变量”的意思,,可否详细点说??
毕竟只是1只小白:P 小白没关系,我们都从小白过来的
将你程序中的第22行由dataFile.println(data);改成dataFile.print(data); 半年还没解决呀,我已处理好了。
首先不要用软串口,我看过头文件,软串口只有64字节的BUFF。而GPS一次输入会超过512字节。
软串口处理时间长易受干扰等式等式问题。
#include <SD.h>
File myFile;
int cont = 0;
void setup() {
Serial.begin(115200);
pinMode(10, OUTPUT);
SD.begin(7);
myFile = SD.open("nmea.txt", FILE_WRITE);
}
void loop()
{
while(Serial.available()){
myFile.write(Serial.read());
}
//每10字节写入卡里一次
cont++;
if(cont > 10){
myFile.flush();
cont = 0;
}
} 问题似乎没有描述的太清楚,我的理解是,每一秒钟采集一次GPS信息,并且写入SD卡,中间是模拟口采集到的信息?还是,GPS和模拟口信息需要连续采集,1S钟将所有信息写一次SD? 值得好好研究!!! dataFile.close();
你写了多少数据文件就关了?
页:
[1]