本帖最后由 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信息,如:
[pre lang="GPS" line="1"]$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[/code]
但由于如果一秒一条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卡里面呢?
谢谢! |