it seems that the location is not accurate enough and im trying to understand this simple code i found in DFRobot library. Can anyone help me how to convert them to accurate latitude and longitude? thanks ! just the location i’m worrying about.
Here is my code:
#include <DFRobot_sim808.h>
#include <SoftwareSerial.h>
#define MESSAGE_LENGTH 160
char message[MESSAGE_LENGTH];
int messageIndex = 0;
char MESSAGE[300];
char lat[12];
char lon[12];
char wspeed[12];
char newlatminutes[12];
int latitude;
int longitude;
char phone[16];
char datetime[24];
#define phone_num “09096637389”
#define PIN_TX 10
#define PIN_RX 11
SoftwareSerial mySerial(PIN_TX,PIN_RX);
DFRobot_SIM808 sim808(&mySerial);//Connect RX,TX,PWR,
void setup()
{
pinMode(6,INPUT);
pinMode(52, INPUT);
digitalWrite(6,HIGH);
delay(2000);
digitalWrite(6,LOW);
delay(1000);
mySerial.begin(9600);
Serial.begin(9600);
//******** Initialize sim808 module *************
while(!sim808.init())
{
Serial.print(“Sim808 init error\r\n”);
delay(1000);
}
delay(3000);
if( sim808.attachGPS())
Serial.println(“Open the GPS power success”);
else
Serial.println(“Open the GPS power failure”);
Serial.println(“Init Success, please send SMS message to me!”);
}
void loop()
{
//*********** Detecting unread SMS ************************
messageIndex = sim808.isSMSunread();
while(!sim808.getGPS())
{
if (sim808.getGPS()){
Serial.print(“speed_kph :”);
Serial.println(sim808.GPSdata.speed_kph);
delay(2000);
}
}
//*********** At least, there is one UNREAD SMS ***********
if (messageIndex > 0 || digitalRead(52) == LOW)
{
Serial.print("messageIndex: ");
Serial.println(messageIndex);
sim808.readSMS(messageIndex, message, MESSAGE_LENGTH, phone, datetime);
//*In order not to full SIM Memory, is better to delete it
sim808.deleteSMS(messageIndex);
Serial.print("From number: ");
Serial.println(phone);
Serial.print("Datetime: ");
Serial.println(datetime);
Serial.print("Recieved Message: ");
Serial.println(message);
Serial.print(sim808.GPSdata.year);
Serial.print("/");
Serial.print(sim808.GPSdata.month);
Serial.print("/");
Serial.print(sim808.GPSdata.day);
Serial.print(" “);
Serial.print(sim808.GPSdata.hour);
Serial.print(”:");
Serial.print(sim808.GPSdata.minute);
Serial.print(":");
Serial.print(sim808.GPSdata.second);
Serial.print(":");
Serial.println(sim808.GPSdata.centisecond);
// Serial.print(“latitude :”);
// Serial.println(sim808.GPSdata.lat,6);
/* sim808.latitudeConverToDMS();
Serial.print(sim808.latDMS.degrees);
Serial.print("^");
Serial.print(sim808.latDMS.minutes);
Serial.print("’");
Serial.print(sim808.latDMS.seconeds,6);
Serial.println(""");
Serial.print(“newlatitude :”);*/
// Serial.print(“longitude :”);
// Serial.println(sim808.GPSdata.lon,6);
sim808.LongitudeConverToDMS();
Serial.print(“longitude :”);
Serial.print(sim808.longDMS.degrees,2);
Serial.print("^");
Serial.print(sim808.longDMS.minutes,2);
Serial.print("’");
Serial.print(sim808.longDMS.seconeds,6);
Serial.println(""");
Serial.println(sim808.GPSdata.lat);
Serial.print(“latitude :”);
Serial.print("^");
Serial.println(sim808.GPSdata.lon);
Serial.print(“longitude :”);
Serial.print("^");
Serial.print(“speed_kph :”);
Serial.println(sim808.GPSdata.speed_kph);
Serial.print(“heading :”);
Serial.println(sim808.GPSdata.heading);
Serial.println();
float la = sim808.GPSdata.lat;
float lo = sim808.GPSdata.lon;
float ws = sim808.GPSdata.speed_kph;
dtostrf( la,6, 6, lat); //put float value of la into char array of lat. 6 = number of digits before decimal sign. 2 = number of digits after the decimal sign.
dtostrf( lo,6, 6, lon); //put float value of lo into char array of lon
dtostrf( ws,6, 6, wspeed); //put float value of ws into char array of wspeed
sprintf(MESSAGE, “Latitude : %s\nLongitude : %s\nSpeed in kph : %s kph\nEMERGENCY !! Track my location here: \nhttp://maps.google.com/maps?q=%s,%s”, lat, lon, wspeed, lat, lon);
if (messageIndex < 0) {
Serial.println(“Sim808 init success”);
Serial.println(“Start to send message …”);
Serial.println(MESSAGE);
Serial.println(phone_num);
sim808.sendSMS(phone_num,MESSAGE);
}
else {
Serial.println(“Sim808 init success”);
Serial.println(“Start to send message …”);
Serial.println(MESSAGE);
Serial.println(phone);
sim808.sendSMS(phone,MESSAGE);
}
//************* Turn off the GPS power ************
// sim808.detachGPS();
}
}