SD+GPS помогите найти 2 ошибки

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

код:

#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
 
при этом долготу показывает верно.....

 

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

с первой ошибкой разобрался а вот почему он широту на лям режет не могу понять