nocentini:
Il mio problema ora è riuscire a passare dalla String a una variabile di tipo int o float, in modo che per esempio la latitudine dovrei moltiplicarla per 10 per spostare la virgola, però quando vado a leggere i dati int nel monitor seriale questi non corrispondono a quelli presenti in string
Come dico sempre, affrontare le cose per gradi. Intanto lascia per ora stare la seriale, fai un semplice sketch dove nella variabile NMEA metti direttamente una stringa ricevuta dal GPS e cerchi di interpretare quella, ossia dopo la prima virgola hai l'orario nel formato "hhmmss.sss", giusto?
Per cercare di fartici arrivare da solo (in questo modo si impara meglio e più velocemente...) vedi questo esempio (fai sempre piccoli sketch per sperimentare e capire una cosa per volta):
String NMEA;
String ora1;
float ora;
void setup() {
Serial.begin(9600);
// Simulo l'input
NMEA = "$GNRMC,054157.013,A,2307.1261,N,12016.4308,E,0.62,286.99,170415,,,A*77";
// Qui avrò "054157.013"
ora1 = NMEA.substring(7, 16);
Serial.println(ora1);
// Qui cerco di convertire in intero (?) la stringa "054157.013"
// e la memorizzo in un float (??)
Serial.println(atoi(ora1.c_str()));
ora = atoi(ora1.c_str());
// Dovrei ottenere il valore 54157: è così???
Serial.println(ora);
}
void loop() {
}
Provalo e analizza cosa succede ad ogni passo.
Dovresti ottenere il valore 54157 invece scommettiamo che vedi -11379?
Per capirlo ti dò un aiutino: cosa fa la funzione "atoi()"?
PS: per cercare di capire ancora di più come funzionano certe cose, perché non ti iscrivi a Tinkercad Circuits dove c'è un buon emulatore di circuiti ed in particolare di Arduino, con tanto di debug, breakpoint, e visualizzazione del valore delle variabili?