At command e stringhe

Ciao a tutti, possiedo un arduino uno e un modulo SIM808.
Tramite il commando AT "AT+CGPSINF" inserito in un apposito sketch mi stampa automaticamente a video una (credo) stringa... o sequenza di caratteri che non sono prelevabili singolarmente..
cioè.. io vorrei prendere e inglobare in una variabile la latitudine, la longitudine, l'altitudine, il tempo ecc ecc..
come posso fare?
Grazie

Posta lo sketch.

Lo sketch che ho utilizzato è il seguente:

#include <SoftwareSerial.h>
#include<stdio.h>
#include<string.h>
#define DEBUG true


SoftwareSerial mySerial(7,8); 
        
void setup()
{
  Serial.begin(9600);
 mySerial.begin(9600); 
}

void loop()
{
   getgps();
   while(1)
   {
        sendData( "AT+CGPSINF",1000,DEBUG);   
        delay(10000);
        
   }
 
}
//------------------
void getgps(void)
{
    
   sendData( "AT+CGPSPWR=1",1000,DEBUG); 
}


boolean sendData(String command, const int timeout, boolean debug)
{
    String response = "";    
    mySerial.println(command); 
    long int time = millis();   
    while( (time+timeout) > millis())
    {
      while(mySerial.available())
      {       
        char c = mySerial.read(); 
        response+=c;
      }  
    }    
    if(debug)
    {
      Serial.print(response);
    }    
    return response;
}

Come posso estrarre le informazioni da quell'AT command e mettere le informazioni separatamente in altre variabili?
Grazie

Alquanto difficoltoso. La stringa che ricevi è dentro response di tipo oggetto String (e lasciamo stare il discorso che sarebbe meglio array di char terminati da null, ovvero le stringhe classiche del C invece di quella libreria/oggetto che dà problemi di mancanza SRAM su queste piccole MCU, Arduino Uno SRAM=2K)
Devi per forza analizzare la Stringa carattere per carattere e separare le cose.
Posta esattamente il msg che ricevi (dal Monitor Seriale puoi fare copia/incolla)

P.S. non è fondamentale, ma il millis() può andare in overflow e azzerarsi dopo tot giorni (mi pare 50/52)
Quindi quel calcolo non è ottimale: (time+timeout) > millis()
Meglio scriverlo come differenza: (millis()-time)>timeout
Qui una spiegazione: http://www.leonardomiliani.com/2012/come-gestire-loverflow-di-millis/

Grazie per la dritta finale.. mi darò una bella lettura all'articolo che mi hai mandato e correggerò :wink:
Questa è la stringa che ottengo con quel comando..(ho oscurato qualche numero solo per privacy ;D ;D )

ho modificato... ora funziona

Ma quali pezzi ti servono ?

+CGPSINF: 1,1,20160402084312.000,?1.116128,?6.877335,17.100,1.69,141,2,1,,2.0,2.2,0.9,,4,4,,,36,,

OK

Essendo memorizzato in un oggetto String, puoi usare indexOf() per individuare i separatori, ovvero le virgole.
Qui un esempio in cui si cercano i separatori fatti dal carattere '>' :

ok, grazie mille! Vedo un po' i link che mi hai passato! Grazie!!!