Skip to content
Snippets Groups Projects
Commit 73f4fb11 authored by roaa1g19's avatar roaa1g19
Browse files

made _rodGPS_Distance() function for accurate distance calcs

parent f1b4566a
No related branches found
No related tags found
No related merge requests found
...@@ -14,6 +14,4 @@ void setup() ...@@ -14,6 +14,4 @@ void setup()
void loop() void loop()
{ {
_rodGPS_MakeReading(&gprmc_buff, &test); _rodGPS_MakeReading(&gprmc_buff, &test);
Serial.print(std::atof("32.575"));
Serial.write("\n\n");
} }
...@@ -26,10 +26,10 @@ void _rodGPS_PrintGPRMC(simple_GPRMC* gprmc_data) ...@@ -26,10 +26,10 @@ void _rodGPS_PrintGPRMC(simple_GPRMC* gprmc_data)
Serial.write(gprmc_data->DATE[5]); Serial.write(gprmc_data->DATE[5]);
Serial.write("\nLatitude: "); Serial.write("\nLatitude: ");
Serial.write((uint8_t*)&(gprmc_data->LATI),10); Serial.write((uint8_t*)&(gprmc_data->LATI),LATI_SIZE);
Serial.write(gprmc_data->LATI_DIR); Serial.write(gprmc_data->LATI_DIR);
Serial.write(" Longitude: "); Serial.write(" Longitude: ");
Serial.write((uint8_t*)&(gprmc_data->LONG),11); Serial.write((uint8_t*)&(gprmc_data->LONG),LONG_SIZE);
Serial.write(gprmc_data->LONG_DIR); Serial.write(gprmc_data->LONG_DIR);
Serial.write("\n\n"); Serial.write("\n\n");
...@@ -42,8 +42,13 @@ double _rodGPS_SimpleDistance(simple_GPRMC* coord_1, simple_GPRMC* coord_2) ...@@ -42,8 +42,13 @@ double _rodGPS_SimpleDistance(simple_GPRMC* coord_1, simple_GPRMC* coord_2)
return sqrt( dx*dx + dy*dy ); return sqrt( dx*dx + dy*dy );
} }
double _rodGPS_Distance(simple_GPRMC* coord_1, simple_GPRMC* coord_2)
{
return 6378388 * acos(sin(std::atof(coord_1->LATI)) * sin(std::atof(coord_2->LATI)) + cos(std::atof(coord_1->LATI)) * cos(std::atof(coord_2->LATI)) * cos(std::atof(coord_2->LONG) - std::atof(coord_1->LONG)));
}
static char char_buff[5]; static char char_buff[5];
byte _rodGPS_MakeReading(simple_GPRMC* gprmc1, simple_GPRMC* gprmc2) uint8_t _rodGPS_MakeReading(simple_GPRMC* gprmc1, simple_GPRMC* gprmc2)
{ {
while(Serial2.available() == 0) {;} while(Serial2.available() == 0) {;}
...@@ -102,7 +107,7 @@ byte _rodGPS_MakeReading(simple_GPRMC* gprmc1, simple_GPRMC* gprmc2) ...@@ -102,7 +107,7 @@ byte _rodGPS_MakeReading(simple_GPRMC* gprmc1, simple_GPRMC* gprmc2)
_rodGPS_PrintGPRMC(gprmc1); _rodGPS_PrintGPRMC(gprmc1);
Serial.write("Distance: "); Serial.write("Distance: ");
Serial.println(String((_rodGPS_SimpleDistance(gprmc1,gprmc2)),2)); Serial.println(String((_rodGPS_Distance(gprmc1,gprmc2)),2));
Serial.write("\n\n"); Serial.write("\n\n");
for(byte i = 0; i < 10; i++) for(byte i = 0; i < 10; i++)
......
#ifndef RODGPS_HPP
#define RODGPS_HPP
#include <Arduino.h> #include <Arduino.h>
#include <HardwareSerial.h> #include <HardwareSerial.h>
#include <string.h> #include <string.h>
#ifndef RODGPS_HPP #define LATI_SIZE 10
#define RODGPS_HPP #define LONG_SIZE 11
typedef struct simple_GPRMC typedef struct simple_GPRMC
{ {
...@@ -11,14 +14,15 @@ typedef struct simple_GPRMC ...@@ -11,14 +14,15 @@ typedef struct simple_GPRMC
char DATE[6]; char DATE[6];
char VALID; char VALID;
char LATI[10]; char LATI[LATI_SIZE];
char LATI_DIR; char LATI_DIR;
char LONG[11]; char LONG[LONG_SIZE];
char LONG_DIR; char LONG_DIR;
}; };
void _rodGPS_PrintGPRMC(simple_GPRMC* gprmc_data); void _rodGPS_PrintGPRMC(simple_GPRMC* gprmc_data); /* Print out the GPRMC data */
double _rodGPS_SimpleDistance(simple_GPRMC* coord_1, simple_GPRMC* coord_2); double _rodGPS_SimpleDistance(simple_GPRMC* coord_1, simple_GPRMC* coord_2); /* Quicker distance calculation, good enough for small distances */
byte _rodGPS_MakeReading(simple_GPRMC* gprmc1, simple_GPRMC* gprmc2); double _rodGPS_Distance(simple_GPRMC* coord_1, simple_GPRMC* coord_2); /* Accurate distance calculations */
uint8_t _rodGPS_MakeReading(simple_GPRMC* gprmc1, simple_GPRMC* gprmc2); /* Make a GPRMC reading from GPS IC */
#endif /* RODGPS_HPP */ #endif /* RODGPS_HPP */
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment