Modificar datos GPS

Hola a todos,

Estoy realizando un pequeño proyecto con un GPS que debe mostrar una serie de valores por pantalla, como por ejemplo la fecha, hora, latitud y longitud.

El problema es que en el caso de la fecha y la hora, el GPS muestra los datos de esta manera por defecto:
fecha: 03032014
hora: 173445.35

Me gustaría modificar esos valores para que sean más "vistosos" y facilitar su lectura en pantalla, por ejemplo:
fecha: 03/03/2014
hora: 17:34:45

¿Es esto posible? Adjunto el código que estoy usando:

#include <genieArduino.h>  //Incluye la librería de la pantalla
#include <SoftwareSerial.h>  //Incluye la librería del GPS


SoftwareSerial gpsSerial(10, 11); // TX, RX (RX not used)
const int sentenceSize = 80;
char sentence[sentenceSize];
int curso;

void setup() 
{ 
  genieBegin (GENIE_SERIAL, 9600);  //Serial0 Comunicación con la pantalla
  gpsSerial.begin(9600);  //Comunicación con el GPS 

}



void loop() 
{ 

  static int i = 0;
  if (gpsSerial.available())
  {
    char ch = gpsSerial.read();
    if (ch != '\n' && i < sentenceSize)
    {
      sentence[i] = ch;
      i++;
    }
    else
    {
     sentence[i] = '\0';
     i = 0;
     displayGPS();
    }
  }    
}


void displayGPS()
{
  char field[20];
  
  getField(field, 0);
  if (strcmp(field, "$GPRMC") == 0)
  {
    getField(field, 9);  // Fecha
    genieWriteStr(0,field); //Comando para mostrar la fecha por pantalla en un string
    
    getField(field, 1);  // Hora
    genieWriteStr(1,field); // Comando para mostrar la hora por pantalla en un string
    
    getField(field, 3);  // Latitud
    genieWriteStr(2,field);
    getField(field, 4); // N/S
    genieWriteStr(3,field);

    
    getField(field, 5);  // Longitud
    genieWriteStr(4,field);
    getField(field, 6);  // E/W
    genieWriteStr(5,field);
    
}


void getField(char* buffer, int index)
{
  int sentencePos = 0;
  int fieldPos = 0;
  int commaCount = 0;
  while (sentencePos < sentenceSize)
  {
    if (sentence[sentencePos] == ',')
    {
      commaCount ++;
      sentencePos ++;
    }
    if (commaCount == index)
    {
      buffer[fieldPos] = sentence[sentencePos];
      fieldPos ++;
    }
    sentencePos ++;
  }
  buffer[fieldPos] = '\0';
 
}

Gracias.

Hay que leerse los manuales de Arduino o buscar por Internet. Son cosas básicas

String fecha="03032014";
String dia="";
String mes="";
String anyo;

dia=fecha.substring(0,2);
Serial.print(dia);
Serial.print("/");
mes=fecha.substring(2,4);
Serial.print(mes);
Serial.print("/");
anyo=fecha.substring(4,8);
Serial.println(anyo);

Jopapa
www.jopapa.me

Gracias Jopapa.

He pensado en hacerlo así, pero no sé cómo incluir las tres variables dentro del genieWriteStr, que es un comando de la pantalla en el que se incluye el string que quieres que se muestre.

 getField(field, 9);  // La variable field es la que da el GPS con la fecha
    String date = field;
    String day = date.substring(0,2);
    String month = date.substring(2,4);
    String year = date.substring(4,8);
    genieWriteStr(0, day"/"month"/"year);

Esa última línea del código da error. (el 0 representa el string en el que se va a almacenar en la pantalla las variables que se ponen después de la coma, en este caso day, month y year)
¿Alguna idea?

No se la sintaxis de genieWriteStr, pero ¿no será concatenando?

genieWriteStr(0, day+"/"+month+"/"+year);

O bien unirlas antes con sintaxis Arduino

Jopapa

He estado investigando y el GPS manda el dato de la fecha en un char*, es decir, el 03042014 es una variable de tipo char*.
El comando genieWriteStr() sólo acepta variables de tipo char*, por lo que, una vez realizada la concatenación que me has comentado, hay que convertir ese string a char+ de nuevo. He probado con el comando toCharArray() y funciona.

getField(field, 9);  // Date
    String date = field;
    String day = date.substring(0,2);
    String month = date.substring(2,4);
    String year = date.substring(4,8);
    String fecha = (day+"/"+month+"/"+year);
    char fecha1 [10];
    fecha.toCharArray(fecha1,10);
    genieWriteStr(0, fecha1);

Gracias otra vez Jopapa

Estoy haciendo lo mismo con el tiempo y parece que no funciona igual de bien. Creo que es un problema debido al tamaño del char array.

Este es el formato en el que me da la hora el GPS: 180546.000 y este el código que estoy usando

getField(field, 1);  // Time
    String time = field;
    String time1 = time.substring(0,6);  // Utilizo esto para eliminar el .000 sobrante de la hora
    String hour = time1.substring(0,2);
    String minute = time1.substring(2,4);
    String second = time1.substring(4,6);
    String hora = (hour+":"+minute+":"+second);
    char hora1 [20];
    hora.toCharArray(hora1, 20);
    genieWriteStr(1, hora1);

De esta manera, la hora resultante debería ser 18:05:46. ¿Cuál es el tamaño exacto que debería tener el char hora1?

Gracias.