Buongiorno a tutti, come alcuni di voi sapranno sto cercando di creare un GPS che in relazione a coordinate date indichi la direzione da seguire per raggiungere tale punto attraverso un modulo bussola.
Non so se questa sia la strada giusta ma sto procedendo step by step, ovvero prima comprendo il funzionamento dei singoli moduli e successivamente li metto in relazione tra loro.
Finalmente è arrivato da Aliexpress il modulo GPS e sto cercando di decodificare i dati che arrivano attraverso la libreria TinyGPS.h.
Il modello che ho acquistato è il seguente :link
Ho provato differenti sketch ma riesco a leggere sul seriale solo dati “puri” senza riuscire a codificarli.
Di seguito gli sketch che sono riuscito a trovare online.
//SKETCH UNO
#include <SoftwareSerial.h>
#include <TinyGPS.h>
float lat = 0.0;
float lon = 0.0;
SoftwareSerial gpsSerial (3,4); // 3: RX, 4: TX
TinyGPS gps;
void setup() {
Serial.begin(9600);
gpsSerial.begin(9600);
Serial.println ("GPS PRONTO");
}
void loop() {
while(gpsSerial.available()){
char c = gpsSerial.read();
Serial.print(c);
if (gps.encode(c)){
gps.f_get_position(&lat, &lon);
Serial.print(lat);
Serial.print(" ");
Serial.println(lon);
}
}
delay (1000);
}
// SKETCH DUE
#include <SoftwareSerial.h>
#include <TinyGPS.h>
long latitude, longitude;
unsigned long idadeInfo;
SoftwareSerial gpsSerial(3, 4); // RX, TX
TinyGPS gps;
void setup() {
gpsSerial.begin(9600);
Serial.begin(9600);
Serial.println("GPS PRONTO");
}
void loop() {
bool ricevuto = false;
while (gpsSerial.available()) {
char c = gpsSerial.read();
ricevuto = gps.encode(c);
}
if (ricevuto) {
Serial.println("----------------------------------------");
gps.get_position(&latitude, &longitude, &idadeInfo);
if (latitude != TinyGPS::GPS_INVALID_F_ANGLE) {
Serial.print("Latitude: ");
Serial.println(float(latitude) / 100000, 6);
}
if (longitude != TinyGPS::GPS_INVALID_F_ANGLE) {
Serial.print("Longitude: ");
Serial.println(float(longitude) / 100000, 6);
}
if (idadeInfo != TinyGPS::GPS_INVALID_AGE) {
Serial.print("Idade da Informacao (ms): ");
Serial.println(idadeInfo);
}
}
}
Il problema è che in entrambi i sketch mi legge e mi stampa "c" ma quando gli chiedo di decodificarlo col comando gps.encode (c) non mi stampa nulla. Ho provato ad inserire un else dopo "if gps.encode (c)" e risponde sempre l'else, quindi suppongo non decodifichi.
Il modulo GPS credo funzioni perché ho attaccato tx e rx sui pin 0 e 1 e quando fixa mi tira fuori anche la posizione.
Vi ringrazio in anticipo per la pazienza
Silvio