如何设置时间间隔,把GPS数据记录到SD卡上?THX~
现在在做一个实验,需要记录GPS数据和其他一些传感器的数据,现阶段只进行到GPS数据记录就被卡住了~#include <SD.h>
const int chipSelect = 10;
void setup()
{
Serial.begin(9600);
pinMode(10, OUTPUT);
if (!SD.begin(chipSelect)) {
return;
}
}
void loop()
{
char index = 0;
char temp = 0;
String dataString = "";
File dataFile = SD.open("datalog.txt", FILE_WRITE);
if(dataFile)
{
while(Serial.available())
{
temp = Serial.read();
dataString += String(temp);
index++;
if(index>200)
break;
}
dataFile.print(dataString);
dataFile.close();
}
}
利用上面的sketch,能够把GPS的数据记录下来,结果如下:
$PSRFTXT,Version: GSD4e_4.0.4-P1_RPATCH.06-GS003*60
$PSRFTXT,VAS: Disabled*4A
$PSRFTXT,TOW:0*25
$PSRFTXT,WK: 1596*6E
$PSRFTXT,POS:6378137.0 0.0 0.0*34
$PSRFTXT,CLK:96248*2C
$PSRFTXT,CHNL: 12,*73
$PSRFTXT,Baud rate: 9600,*66
$GPGGA,235946.013,,,,,0,00,,,M,0.0,M,,0000,*5B
$GPGLL,,,,,235946.013,V,N,*77
$GPGSA,A,1,,,,,,,,,,,,,,,,*1E
$GPGSV,3,1,12,01,00,000,,02,00,000,,03,00,000,,04,00,000,,*7C
$GPGSV,3,2,12,05,00,000,,06,00,000,,07,00,000,,08,00,000,,*77
$GPGSV,3,3,12,09,00,000,,10,00,000,,11,00,000,,12,00,000,,*71
$GPRMC,235946.013,V,,,,,,,070810,,,N,*4E
$GPVTG,,T,,M,,N,,K,N,*2C
……………………………………
但如果按上面提供的sketch进行数据记录将产生非常庞大的数据量(24小时不到已经几十万行数据了),能告诉怎么设置时间间隔采样么?
我尝试过用delay(60000),但比较可惜是,虽然也能记录,但却不能把同一时间点的所有GPS数据记录下来,非常多的数据都丢失了~
有什么可以选择的方法么?
有朋友建议说用millis()进行时间间隔的判别,可是说实在,小弟真的不明白具体怎么个操作法{:soso_e118:}
小的编程程度大概是基本能读懂一些不太复杂的程序,可以把几个相似的程序做比较然后进行修改、模仿,仅此而已{:soso_e113:}
希望能得到大家的指点,也谢谢大家的赐教~{:soso_e183:} 原因就在于,你程序还在延时时,可能串口早就接收到数据了,所以延时结束时,你可能只能接收到部分数据了,
millis()在这里的用法,你可以参考例子里的BlinkWithoutDelay
页:
[1]