Mise de coordonnées GPS dans des variables

Bonjour à tous,
Nous sommes 3 élèves de terminale STI2D SIN. Notre projet pour le bac est un ordinateur de bord adaptable sur une voiture ancienne.
Pour ce projet, nous avons besoin de calculer une distance parcourue grâce aux coordonnées GPS.

Avec la bibliothèque TinyGPS++, nous réussissons à afficher les coordonnées exactes sur le moniteur série.

Seulement, pour exploiter ces coordonnées, il nous faut les mettre dans des variables. Et si on affiche ces variables sur le moniteur série, on se rend compte que nos coordonnées s'arrêtent 2 chiffres après la virgule, soit une précision bien insuffisante.

Nous n'arrivons par à trouver pourquoi les coordonnées sont arrondies à 2 chiffres après la virgule, si quelqu'un a une idée, ça nous aiderait beaucoup :grinning:

Matériel : Arduino MEGA et GPS SIM28 Grove.

Bonne journée et bonne année à tous !

#include <TinyGPS++.h>
#include <rgb_lcd.h>

rgb_lcd lcd;
TinyGPSPlus gps;
float lati = 0;
float lon = 0;
int alt = 0;
int vitesse = 0;


void setup() 
{
  Serial.begin(9600);
  Serial3.begin(9600);
  lcd.begin(16,2);
}

void loop() 
{
  // put your main code here, to run repeatedly:
 while (Serial3.available()>0)
  {
    int c = Serial3.read();
    if (gps.encode(c))
    {
      //POSITION
      Serial.println(gps.location.lat(), 6); // Latitude in degrees (double) //OK
      Serial.println(gps.location.lng(), 6); // Longitude in degrees (double) //OK EGALEMENT
      lati = gps.location.lat(), 6;
      lon = gps.location.lng(), 6;
      Serial.println(lati); //N'AFFICHE QUE 2 CHIFFRES APRES LA VIRGULE
      Serial.println(lon); //IDEM
      

      //ALTITUDE
      alt = gps.altitude.meters();
      Serial.print("ALT=");  Serial.println(alt);
      vitesse = gps.speed.kmph();
      Serial.print("V=");   Serial.println(gps.speed.kmph()); // Speed in kilometers per hour (double)
      
      lcd.clear();
      lcd.print(vitesse);
    }
  }
}
      Serial.println(gps.location.lat(), 6); // Latitude in degrees (double) //OK
      Serial.println(gps.location.lng(), 6); // Longitude in degrees (double) //OK EGALEMENT

Dans ce premier cas, la latitude et la longitude sont affichée avec 6 chiffres après la virgule. OK.

      lati = gps.location.lat(), 6;
      lon = gps.location.lng(), 6;

Ces deux lignes la latitude et la longitude sont rangées dans deux variables de type float. OK.
La virgule et ce qui suit n'ont rien à faire là, sauf le poin-virgule.

      Serial.println(lati); //N'AFFICHE QUE 2 CHIFFRES APRES LA VIRGULE
      Serial.println(lon); //IDEM

Dans ce deuxième cas, la latitude et la longitude sont affichée sans précision, donc cela donnera 2 chiffres après la virgule. 2 est la valeur par défaut.

Tu devrais écrire :

      lati = gps.location.lat();
      lon = gps.location.lng();
      Serial.println(lati, 6);
      Serial.println(lon, 6);

@+

@hbachetti
Merci beaucoup de ta réponse, ça fonctionne !
Donc, si je comprends bien, le nombre était stocké correctement dans le float, mais le moniteur série arrondit par défaut à 2 décimales ?

Pas le moniteur, mais les méthodes print ou println.

@+