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
при этом долготу показывает верно.....
с первой ошибкой разобрался а вот почему он широту на лям режет не могу понять