Comment récupérer un uint_32 avec une fonction

Bonjour,

Je me prend encore le chou avec un truc que je devrais résoudre, mais voilà.... c'est pas le cas.

J'ai une fonction qui va enregister les positions (latitude, longitude, datetime)

Pour cela, je déclare ma fonction ainsi:

void get_gps(uint32_t ilat, uint32_t ilon, uint32_t idat)
{

/*Cacule de la latitude*/
float flat, flon, f_sat, f_prec, f_flat, f_flon, f_speed;
unsigned long age;
gps.f_get_position(&flat, &flon, &age);

f_flat = (flat == TinyGPS::GPS_INVALID_F_ANGLE) ? 0.0 : flat;
f_flat = f_flat*10000;
ilat = (int)f_flat; // Converti en int EST_CE QUE LE (INT) EST OPTIONNEL?

Serial.print(F("DEBUG1")); Serial.println(ilat);


 f_flon = (flon == TinyGPS::GPS_INVALID_F_ANGLE) ? 0.0 : flon;
f_flon = f_flon*10000;
ilon = (int)f_flon; // Conrti e it

sprint(F("Age"),2);
      gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
      if (age == TinyGPS::GPS_INVALID_AGE)
        Serial.print("*******    *******    ");
      else
      {
        char sz[22];
        sprintf(sz, "%02d-%02d-%02d %02d:%02d:%02d   ",
              year, month, day, hour, minute, second);
        sprint(sz, 2);  
      }
      uint d;
      //2017-2000 = 17
      d = year-2000;  // 17
      d = d * 1000;   // 1700
      d = d + month;  // 1709
      d = d * 1000;   // 170900
      d = d + day;    // 170922
      d = d * 10000;

      uint t;
      t = hour;       // 22
      t = t *100;     // 2200
      t = t+minute;   // 2256
      idat = d+t;     // 1709222256

}


get_gps(ilati, ilong, idate);
      Serial.print(F("DEBUG11")); Serial.println(ilati);
      Serial.println(ilong);
      Serial.println(idate);

Je ne comprends paspourquoi DEBUG11 m'affiche 0, alors que DEBUG1 m'affiche 462354

et quand le GPS n'est pas disponible, donc newData == false, DEBUG11 m'affiche un truc de farfelu, du genre: 536872492

Je nage....

Merci pour vos lumières

536872492 pourrait correspondre à la date et heure 5/1/1987 à 20:14:52

Bonjour,
Non, ca ne corespond pas à la date :slight_smile:
Je suisarrivé à un truc de bien en simplement changeant la déclaration de la fonction et en donnant la valeur de zéro au parametre, dans lecas ou iln'y avait de GPSdisponible, une valeur est attribuée...

void get_gps(uint32_t &ilat, uint32_t &ilon, uint32_t &idat)
{
ilat = 0;
ilon = 0;
idat = 0;
}

Ceci dit pour la date, ca foire complétement..., il me retorune -1698479912 alors qu'il devrait me retoruner 1710202134.

Mais là, il y asurement un problème ailleur.... :slight_smile:

    uint d;
      //2017-2000 = 17
      d = year-2000;  // 17
      d = d * 1000;   // 1700
      d = d + month;  // 1709
      d = d * 1000;   // 170900
      d = d + day;    // 170922
      d = d * 10000;

d est un entier non signé sur 16 bits. Domaine de validité 0 a 65535

Hors avec tes calculs on est largement en dehors du domaine de validité

Déclare la variable d en unsigned long et ça devrait aller mieux