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/
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!!!
