Pages: [1]   Go Down
Author Topic: Need help on how to convert/read the GPS Coordinates...  (Read 662 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 15
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

please tell me on how to convert this data:

my data in longitude:12350.790066 and latitude:808.882390

and this is the code taken from the net...


#include "SIM900.h"
#include <SoftwareSerial.h>
#include "gps.h"

GPSGSM gps;

char lon[15];
char lat[15];
char alt[15];
char time[20];
char vel[15];
char msg1[5];
char msg2[5];

char stat;
char inSerial[20];
int i=0;
boolean started=false;

void setup()
{
  //Serial connection.
  Serial.begin(9600);
  Serial.println("GSM Shield testing.");
  if (gsm.begin(2400)){
    Serial.println("\nstatus=READY");
    gsm.forceON();   //To ensure that SIM908 is not only in charge mode
    started=true; 
  }
  else Serial.println("\nstatus=IDLE");
 
  if(started){
    //GPS attach
    if (gps.attachGPS())
      Serial.println("status=GPSREADY");
    else Serial.println("status=ERROR");
   
    delay(20000);   //Time for fixing
    stat=gps.getStat();
   if(stat==1)
      Serial.println("NOT FIXED");
   else if(stat==0)
      Serial.println("GPS OFF");
   else if(stat==2)
      Serial.println("2D FIXED");
   else if(stat==3)
      Serial.println("3D FIXED");
   delay(5000);
   //Get data from GPS
   gps.getPar(lon,lat,alt,time,vel);
   Serial.println(lon);
   Serial.println(lat);
   Serial.println(alt);
   Serial.println(time);
   Serial.println(vel);
  }
};

void loop()
{
  //Read for new byte on serial hardware,
  //and write them on NewSoftSerial.
  serialhwread();
  //Read for new byte on NewSoftSerial.
  serialswread();
};

void serialhwread(){
  i=0;
  if (Serial.available() > 0){           
    while (Serial.available() > 0) {
      inSerial=(Serial.read());
      delay(10);
      i++;     
    }
   
    inSerial='\0';
    if(!strcmp(inSerial,"/END")){
      Serial.println("_");
      inSerial[0]=0x1a;
      inSerial[1]='\0';
      gsm.SimpleWriteln(inSerial);
    }
    //Send a saved AT command using serial port.
    if(!strcmp(inSerial,"TEST")){
        stat=gps.getStat();
   if(stat==1)
      Serial.println("NOT FIXED");
   else if(stat==0)
      Serial.println("GPS OFF");
   else if(stat==2)
      Serial.println("2D FIXED");
   else if(stat==3)
      Serial.println("3D FIXED");
    }
    //Read last message saved.
    if(!strcmp(inSerial,"MSG")){
      Serial.println(msg1);
    }
    else{
      Serial.println(inSerial);
      gsm.SimpleWriteln(inSerial);
    }   
    inSerial[0]='\0';
  }
}

void serialswread(){
  gsm.SimpleRead();
}
Logged

NE PA
Offline Offline
Full Member
***
Karma: 5
Posts: 156
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Convert it to what?
Logged


Offline Offline
Faraday Member
**
Karma: 62
Posts: 3011
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

So you are somewhere near ozamiz city ?

It's not rocket science.....

Quote
my data in longitude:12350.790066 and latitude:808.882390

The NMEA standard describes how these numbers work,  so you should look that up.
For some obscure reason,  these numbers mean:

123 degrees east longitude,  plus 50.790066 minutes of longitude.

8 degrees north lattitude,  plus 8.882390 minutes of lattitude

where a minute of lattitude is 1/60 of a degree.

Some people prefer degrees, minutes and seconds,  in which case you would have 123 degrees, 50 minutes and about 48 seconds east.

And some people just prefer decimal fractions of degrees,  in which case you would have  123.84 degrees east

« Last Edit: February 10, 2013, 11:26:09 am by michinyon » Logged

Global Moderator
UK
Offline Offline
Brattain Member
*****
Karma: 302
Posts: 26248
I don't think you connected the grounds, Dave.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@OP, do you remember any italics in your source code when you wrote it?

Now do you see why we ask you to post code in code tags?
Logged

"Pete, it's a fool looks for logic in the chambers of the human heart." Ulysses Everett McGill.
Do not send technical questions via personal messaging - they will be ignored.

Offline Offline
Sr. Member
****
Karma: 0
Posts: 394
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I found the two solution, that I could not test yet
Code:
float conv_coords(float in_coords)
{
  //Initialize the location.
  float f = in_coords;
  // Get the first two digits by turning f into an integer, then doing an integer divide by 100;
  // firsttowdigits should be 77 at this point.
  int firsttwodigits = ((int)f)/100;                               //This assumes that f < 10000.
  float nexttwodigits = f - (float)(firsttwodigits*100);
  float theFinalAnswer = (float)(firsttwodigits + nexttwodigits/60.0);
  return theFinalAnswer;
}

// converts lat/long from Adafruit
// degree-minute format to decimal-degrees
Code:
// converts lat/long from Adafruit
// degree-minute format to decimal-degrees
double convertDegMinToDecDeg (float degMin) {
  double min = 0.0;
  double decDeg = 0.0;
 
  //get the minutes, fmod() requires double
  min = fmod((double)degMin, 100.0);
 
  //rebuild coordinates in decimal degrees
  degMin = (int) ( degMin / 100 );
  decDeg = degMin + ( min / 60 );
 
  return decDeg;
}

The proble is that nadasaker exemple, the lon and lat value are char array
Code:
gps.getPar(lon,lat,alt,time,vel);
   Serial.println(lon);
   Serial.println(lat);
   Serial.println(alt);
   Serial.println(time);
   Serial.println(vel);

How can we adapt the best of the two function in order to use the char lon and lat value?
Or can er convert char to float, and then, after the convertion float to char? smiley-small
Logged

Il ne suffit pas de tout savoir, la persévérance, c'est déjà presque tout!

Pages: [1]   Go Up
Jump to: