Go Down

Topic: Ecrire un float dans Wire.write() (Read 333 times) previous topic - next topic

beyam78

Bonjour tout le monde,
J'écrivais un code slave_sender pour stocker les données de ma carte GPS dans mon module SD.
La latitude et la longitude étant des nombres décimaux je voulais faire un Wire.write(lat) mais ça m'écrit une erreur call of overloaded 'write(float&)' is ambiguous
Comment fixer ce problèm svp?
 

lesept

Selon cette page, l'argument de Wire.write est soit un byte soit un string. Donc pas un float. Si tu veux écrire un nombre à virgule, il faut le transformer en string (tableau de char).

Ça doit être faisable avec sprintf :
Code: [Select]
  char buffer [10];
  n=sprintf (buffer, "%f9.3", lat);

A tester...
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

beyam78

Donc si j'ai bien compris, au final c'est la variable n qui va stocker la latitude et si je l'affiche je verrai bien le nombre décimal?

lesept

Non, n est le nombre de caractères qui seront écrits dans la variable buffer, qui contiendra la latitude.
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

kamill

Bonjour,

Tu peux envoyer ton float sous forme de tableau d'octets
Code: [Select]
  Wire.write((byte *)&lat,sizeof lat);

Alain46

#5
Jul 09, 2018, 07:58 pm Last Edit: Jul 10, 2018, 12:11 pm by Alain46
Le protocole NMEA 0183 retourne une trame contenant la latitude et la longitude sous forme de chaine de caractère.   
Trame $GPGGA, $GPRMC, $GPGLL
Pourquoi se casser la tête à vouloir à transformer cette information en float pour la retransformer en string pour la stocker.
Autant stocker directement la chaine de caractère que retourne le GPS ce qui évite, entre autre, des conversions qui risquent de nuire à la qualité de l'information
Un programme qui se compile sans erreur n'est pas forcément un programme qui fonctionne.

Go Up