safwan092

GPS Test Code (No Library)

Mar 21st, 2020
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.53 KB | None | 0 0
  1. #include <SoftwareSerial.h>
  2. SoftwareSerial GPSModule(10, 11); // RX, TX
  3. int updates;
  4. int failedUpdates;
  5. int pos;
  6. int stringplace = 0;
  7.  
  8. String timeUp;
  9. String nmea[15];
  10. String labels[12] {"Time: ", "Status: ", "Latitude: ", "Hemisphere: ", "Longitude: ", "Hemisphere: ", "Speed: ", "Track Angle: ", "Date: "};
  11. void setup() {
  12.   Serial.begin(57600);
  13.   Serial.println("Hello");
  14.   GPSModule.begin(9600);
  15. }
  16.  
  17. void loop() {
  18.   Serial.flush();
  19.   GPSModule.flush();
  20.   while (GPSModule.available() > 0)
  21.   {
  22.     GPSModule.read();
  23.  
  24.   }
  25.   if (GPSModule.find("$GPRMC,")) {
  26.     String tempMsg = GPSModule.readStringUntil('\n');
  27.     for (int i = 0; i < tempMsg.length(); i++) {
  28.       if (tempMsg.substring(i, i + 1) == ",") {
  29.         nmea[pos] = tempMsg.substring(stringplace, i);
  30.         stringplace = i + 1;
  31.         pos++;
  32.       }
  33.       if (i == tempMsg.length() - 1) {
  34.         nmea[pos] = tempMsg.substring(stringplace, i);
  35.       }
  36.     }
  37.     updates++;
  38.     nmea[2] = ConvertLat();
  39.     nmea[4] = ConvertLng();
  40.     for (int i = 0; i < 9; i++) {
  41.       Serial.print(labels[i]);
  42.       Serial.print(nmea[i]);
  43.       Serial.println("");
  44.     }
  45.  
  46.   }
  47.   else {
  48.  
  49.     failedUpdates++;
  50.  
  51.   }
  52.   stringplace = 0;
  53.   pos = 0;
  54. }
  55.  
  56. String ConvertLat() {
  57.   String posneg = "";
  58.   if (nmea[3] == "S") {
  59.     posneg = "-";
  60.   }
  61.   String latfirst;
  62.   float latsecond;
  63.   for (int i = 0; i < nmea[2].length(); i++) {
  64.     if (nmea[2].substring(i, i + 1) == ".") {
  65.       latfirst = nmea[2].substring(0, i - 2);
  66.       latsecond = nmea[2].substring(i - 2).toFloat();
  67.     }
  68.   }
  69.   latsecond = latsecond / 60;
  70.   String CalcLat = "";
  71.  
  72.   char charVal[9];
  73.   dtostrf(latsecond, 4, 6, charVal);
  74.   for (int i = 0; i < sizeof(charVal); i++)
  75.   {
  76.     CalcLat += charVal[i];
  77.   }
  78.   latfirst += CalcLat.substring(1);
  79.   latfirst = posneg += latfirst;
  80.   return latfirst;
  81. }
  82.  
  83. String ConvertLng() {
  84.   String posneg = "";
  85.   if (nmea[5] == "W") {
  86.     posneg = "-";
  87.   }
  88.  
  89.   String lngfirst;
  90.   float lngsecond;
  91.   for (int i = 0; i < nmea[4].length(); i++) {
  92.     if (nmea[4].substring(i, i + 1) == ".") {
  93.       lngfirst = nmea[4].substring(0, i - 2);
  94.       //Serial.println(lngfirst);
  95.       lngsecond = nmea[4].substring(i - 2).toFloat();
  96.       //Serial.println(lngsecond);
  97.  
  98.     }
  99.   }
  100.   lngsecond = lngsecond / 60;
  101.   String CalcLng = "";
  102.   char charVal[9];
  103.   dtostrf(lngsecond, 4, 6, charVal);
  104.   for (int i = 0; i < sizeof(charVal); i++)
  105.   {
  106.     CalcLng += charVal[i];
  107.   }
  108.   lngfirst += CalcLng.substring(1);
  109.   lngfirst = posneg += lngfirst;
  110.   return lngfirst;
  111. }
Add Comment
Please, Sign In to add comment