SD+GPS помогите найти 2 ошибки
- Войдите на сайт для отправки комментариев
Чт, 15/02/2018 - 18:06
код:
#include <SD.h> //Load SD card library
#include<SPI.h> //Load SPI Library
#include <Adafruit_GPS.h> //Install the adafruit GPS library
#include <SoftwareSerial.h> //Load the Software Serial library
SoftwareSerial mySerial(A2,A7); //Initialize the Software Serial port
Adafruit_GPS GPS(&mySerial); //Create the GPS Object
String NMEA1; //Variable for first NMEA sentence
String NMEA2; //Variable for second NMEA sentence
char c; //to read characters coming from the GPS
int chipSelect = 10; //chipSelect pin for the SD card Reader
File mySensorData; //Data object you will write your sesnor data to
String fname="";
float lat,lng;
void setup() {
Serial.begin(9600); //Turn on serial monitor
GPS.begin(9600); //Turn on GPS at 9600 baud
pinMode(10, OUTPUT); //Must declare 10 an output and reserve it to keep SD card happy
SD.begin(chipSelect); //Initialize the SD card reader
if (SD.exists("NMEA.nme")) { //Delete old data files to start fresh
SD.remove("NMEA.nme");
}
if (SD.exists("GPSData.txt")) { //Delete old data files to start fresh
SD.remove("GPSData.txt");
}
}
void loop() {
readGPS();
if(GPS.fix==1) { //Only save data if we have a fix
if(fname==""){
fname=String(GPS.day)+"_"+String(GPS.hour)+"-"+String(GPS.minute)+".txt";
SD.exists(fname);
mySensorData = SD.open(fname, FILE_WRITE);
mySensorData.println(" <metadata>");
mySensorData.println(" <author>ELITE</author>");
mySensorData.println(" <name>"+String(GPS.day)+"."+String(GPS.month)+"."+String(GPS.year)+"</name>");
mySensorData.println(" </metadata>");
mySensorData.close();
Serial.println(fname);
}
lat = GPS.latitude/100;
lng = GPS.longitude/100;
mySensorData = SD.open("NMEA.nmea", FILE_WRITE); //Open file on SD card for writing
mySensorData.println(NMEA1); //Write first NMEA to SD card
mySensorData.println(NMEA2); //Write Second NMEA to SD card
mySensorData.close(); //Close the file
mySensorData = SD.open("GPSData.txt", FILE_WRITE);
mySensorData.print(GPS.latitude,4); //Write measured latitude to file
mySensorData.print(GPS.lat); //Which hemisphere N or S
mySensorData.print(",");
mySensorData.print(GPS.longitude,4); //Write measured longitude to file
mySensorData.print(GPS.lon); //Which Hemisphere E or W
mySensorData.print(",");
mySensorData.println(GPS.altitude);
mySensorData.close();
if(fname!=""){
mySensorData = SD.open(fname, FILE_WRITE);
mySensorData.print(" <trkpt lat=\""+String(lat,6)+"\" lon=\""+String(lng,6));
mySensorData.println("\">\n\r </trkpt>");
mySensorData.close();
}
Serial.println(lat,8);
Serial.println(lng,8);
Serial.print(GPS.year); Serial.print("-");
Serial.print(GPS.month); Serial.print("-");
Serial.print(GPS.day); Serial.print(" ");
Serial.print(GPS.hour); Serial.print(":");
Serial.print(GPS.minute); Serial.print(":");
Serial.println(GPS.seconds);
}
}
void readGPS() {
clearGPS();
while(!GPS.newNMEAreceived()) { //Loop until you have a good NMEA sentence
c=GPS.read();
}
GPS.parse(GPS.lastNMEA()); //Parse that last good NMEA sentence
NMEA1=GPS.lastNMEA();
while(!GPS.newNMEAreceived()) { //Loop until you have a good NMEA sentence
c=GPS.read();
}
GPS.parse(GPS.lastNMEA()); //Parse that last good NMEA sentence
NMEA2=GPS.lastNMEA();
// Serial.println(NMEA1);
// Serial.println(NMEA2);
//Serial.println("");
}
void clearGPS() { //Clear old and corrupt data from serial port
while(!GPS.newNMEAreceived()) { //Loop until you have a good NMEA sentence
c=GPS.read();
}
GPS.parse(GPS.lastNMEA()); //Parse that last good NMEA sentence
while(!GPS.newNMEAreceived()) { //Loop until you have a good NMEA sentence
c=GPS.read();
}
GPS.parse(GPS.lastNMEA()); //Parse that last good NMEA sentence
while(!GPS.newNMEAreceived()) { //Loop until you have a good NMEA sentence
c=GPS.read();
}
GPS.parse(GPS.lastNMEA()); //Parse that last good NMEA sentence
}
не выходит:
1) не могу создать расширение файла нужное (gpx или nme) при этом txt,svf,doc,pdf делает
подскажите где можно добавить или как задать своё расширение файла (только расширение, писать в него в формате txt)
2) через несколько минут работы появляется ошибка - широту начинает делить на 100, 10000 и так далее
тоесть число убегает, хотя никаких причин этому в коде не нашел....
54.32344818
36.18182754
18-2-15 14:1:3
54.32344818
36.18182754
18-2-15 14:1:4
2.00121903 ---- Глюк
36.18182754
18-2-15 0:0:3
0.00054198 --- дальеш на 100 00 00 меньше значение
36.18182754
18-2-15 14:1:5
0.00054198
36.18182754
18-2-15 14:1:6
0.00054198
при этом долготу показывает верно.....
с первой ошибкой разобрался а вот почему он широту на лям режет не могу понять