Dica SIM908 NMEA

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Dica SIM908 NMEA

Mensagem  enetsec em Dom 13 Out - 15:20

Para quem esta começando como eu, posto aqui como obter as cordenadas em LAT / LONG , não está nada otimizado (inclusive deve ter coisa sobrando) porem funciona.
agradeco ao codigo que o administrador postou , foi muito util

Código:
#include <SoftwareSerial.h>
#include <Wire.h> //I2C library

SoftwareSerial mySerial(2, 3); //RX, TX

const int powerkey =  5;
const int statuspin = 6;
const int vDetect = 4;
const int led = 13;

int firstClosingBracket;
int vState=0;
int pinState=0;
int count = 0;
int erroConec = 0;
int statusConec = false;
float int_lat_hour = 00.0000;
float int_long_hour = 00.0000;


String inputString = "";        // a string to hold incoming data
String readEeprom = "";
char inChar;
char str_long[16];
char str_lat[16];


void setup() {
 
  Serial.begin(9600);
  mySerial.begin(9600);
  pinMode(powerkey, OUTPUT);
  pinMode(statuspin, INPUT);
  http://inputString.reserve(300);
}
void leserial()
{
    inputString = "";
    while (mySerial.available()>0){       
        inChar = mySerial.read();  //read Serial       
        inputString += inChar;    //prints the character just read
        //delay(1);
    }
    Serial.println(inputString); //coloquei isso pra toda vez que chamar a leitura da softserial ele me entrega no terminal oq ele leu
}
void loop()
{
 Serial.println("Verifica GPS");             
  mySerial.println("AT+CGPSPWR?");
  delay(200);
  leserial(); 
  http://Serial.println(inputString);
  firstClosingBracket = inputString.indexOf(':');
    if (inputString.startsWith("0",firstClosingBracket+2)){
          Serial.println("Ligando GPS");
          mySerial.println("AT+CGPSPWR=1");
          delay(2000); 
          mySerial.println("AT+CGPSRST=0");
        }
    mySerial.flush(); 
  Serial.println("Codigo NMEA");{
  mySerial.println("AT+CGPSINF=0");
  delay(200);             
  leserial();
    char buffer[250] = "";
        char *p_char;
  char *p_char1;

  inputString.toCharArray(buffer, 250); 
  //longitude
  p_char = strchr((char *)(buffer),',');
  p_char1 = p_char+1;  //we are on the first char of longitude
  p_char = strchr((char *)(p_char1), ',');
  if (p_char != NULL) {
          *p_char = 0;
    }
  strcpy(str_long, (char *)(p_char1));

      // latitude
  p_char++;
  p_char1 = strchr((char *)(p_char), ',');
  if (p_char1 != NULL) {
          *p_char1 = 0;
    } 
  strcpy(str_lat, (char *)(p_char));
//Aqui eu transformo string em interger
char str_long_pos[5] = "";
str_long_pos[0] = str_long[0];
str_long_pos[1] = str_long[1];
str_long_pos[2] = str_long[2];
int_long_hour = atof(str_long_pos);
str_long_pos[0] = str_long[3];
str_long_pos[1] = str_long[4];
str_long_pos[2] = str_long[5];
str_long_pos[3] = str_long[6];
float int_long_min = 00.0000;
int_long_min = atof(str_long_pos);
int_long_min = int_long_min / -60; // dividir por 60 é importante para ter a coordenada pronta para o google maps
int_long_hour = int_long_hour + int_long_min;


//Mesma coisa para latitude
char str_lat_pos[5] = "";
str_lat_pos[0] = str_lat[0];
str_lat_pos[1] = str_lat[1];
str_lat_pos[2] = str_lat[2];
int_lat_hour = atof(str_lat_pos);
str_lat_pos[0] = str_lat[3];
str_lat_pos[1] = str_lat[4];
str_lat_pos[2] = str_lat[5];
str_lat_pos[3] = str_lat[6];
float int_lat_min = 00.0000;
int_lat_min = atof(str_lat_pos);
int_lat_min = int_lat_min / -60;
int_lat_hour = int_lat_hour + int_lat_min;

//mostra como ficou
 Serial.println(int_long_hour,4); // esse quatro ai seta o numero de casas decimais
 Serial.println(int_lat_hour,4);


 delay(1000);
 }
}

enetsec

Mensagens : 3
Data de inscrição : 12/06/2013

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum