Buongiorno a tutti,
Sto sviluppando un progetto come tesina per l'esame di maturità di quest'anno che lavora con il GPS per la rilevazione di alcuni dati.
Il progetto è testato e funzionante tranne per quello che riguarda la velocità.
Questa viene rilevata dal GPS (EM-406A montato su Shield GPS Sparkfun) con il quale mi interfaccio con la libreria TinyGPS. Tutti i dati che il GPS mi ritorna vanno bene a parte la velocità che rimane fissa a -1.00 Km/h.
Qualcuno sa quale può essere il motivo?
Il codice per la rilevazione dei dati è il seguente:
Ho visto dal sorgente che la funzione dovrebbe restituire la costante GPS_INVALID_F_SPEED nel caso di dati errati.
float TinyGPS::f_speed_kmph()
{
float sk = f_speed_knots();
return sk == GPS_INVALID_F_SPEED ? GPS_INVALID_F_SPEED : _GPS_KMPH_PER_KNOT * f_speed_knots();
}
E guarda caso tale costante vale proprio -1.0:
const float TinyGPS::GPS_INVALID_F_SPEED = -1.0;
Se ricevi questo valore può darsi che ci sia qualche problema, altrimenti forse è il GPS che non funziona o che non è compatibile?
Hai provato anche a stampare sulla seriale il dato grezzo che ricevi
Finché il GPS non fa un fix manda delle stringhe incomplete. Quando invece riceve i dati vedrai che ti darà la velocità corretta... Puoi sempre provare, lo carichi in auto e ti fai portare in giro, se tutti i dati sono corretti e quello no allora il problema è un altro, la stessa cosa la faceva a me la scorsa settimana perché una libreria la gfx mi andava in conflitto... Perciò fai questa semplice prova prima di rimettere mano al codice...
Tutti gli altri dati sono funzionanti ed è quello che mi fa pensare. La prova del muovermi la ho già fatta visto che il progetto che sto sviluppando serve proprio per la rilevazione dei dati in moto. Nonostante questo mi ritorna sempre -1 anche su un giro di circa 5 Km.
Però problemi di GPS immagino non ce ne siano in quanto mi è capitato mentre il progetto non era ancora completo, e stavo provando i pezzi singolarmente, di vedere velocità come 0.54 Km/h. A volte, stando praticamente fermo ho visto anche velocità di 0.180 Km/h quindi immagino che non sia danneggiato il GPS.
Lo uso su un display grafico ma il concetto è lo stesso... prova a richiamare diretttamente il metodo dentro alla funzione anzichè richiamarlo, assegnarlo ad una varibile e poi visualizzarlo, occupi ram e flash inutilmente..
Pure io ma non ha senso, richiama sempre la funzione, in questo modo non devi riscrivere la variabile ogni volta, vai semplicemente a prendere un valore già presente in ram, certo è che se ti trovi meglio così fai pure
Proverò a fare così... vedremo...
Ora ho provato a montare su un Arduino Uno la shield GPS e sono uscito sul terrazzo a camminare con il portatile.
Ho caricato l'esempio "test_with_GPS_device" e ho utilizzato la comunicazione Serial (quindi quella fisica) sia per i dati che provengono dal GPS sia per visualizzarli su monitor seriale. In effetti così va tutto...
Cosa potrei fare per far funzionare tutto anche sul progetto completo?