Go Down

Topic: Variable dans serial println (Read 569 times) previous topic - next topic

saraza

Bonsoir à tous,

Ce que je veux faire est tout simple mais malgré toutes les recherches et les essais que j'ai fais, je n'ai pas réussi.

client.println("GET /inter.php?id=1 HTTP/1.0");

Je voudrais mettre à la place du 1 une variable.

Comment faut il faire ?

Merci de votre aide

infobarquee

bonjour,
Code: [Select]

client.print("GET /inter.php?id=");
client.println(tavariable);


saraza

J'ai essayé :

Auparavant j'avais ça :
Code: [Select]

client.print("GET /inter.php?id=1 HTTP/1.0");



Comme tu me l'as conseillé, j'ai essayé ça :
Code: [Select]
           client.print("GET /inter.php?id=");
                     client.print(id);
                     client.println(" HTTP/1.0");


Le premier marche mais le second ne marche pas.


Si j'essaie ça :
Code: [Select]
            client.print("GET /inter.php?id=1");
                      client.println(" HTTP/1.0");


Ca non plus, ça ne fonctionne pas.

barbudor

essaye çà :
Code: [Select]
char buffer[80];
sprintf( buffer, "GET /inter.php?id=%d HTTP/1.0", tavariable );
client.println( buffer );
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?


cedric2

C'est bien sprintf, mais c'est au moins 4k de mémoire il me semble. itoa doit être moins lourd.
Tu dois avoir un problème d'espace dans ta première version, tu as essayé un serial.print de la même chaine ?
Sinon, si tavariable fait toujours moins de 10, je ferais un truc du genre

Code: [Select]

char chaine[] = "GET /inter.php?id=1 HTTP/1.0" ;
chaine[19] = tavariable + '0' ;
client.print(chaine);


Et hop, tu gagnes 4k !

saraza

#6
Apr 18, 2012, 06:03 pm Last Edit: Apr 18, 2012, 06:15 pm by saraza Reason: 1
J'ai essayé de modifié les espaces mais je n'ai pas réussi.
Mais Je ne suis pas entre 0 et 9 donc je ne peux pas utiliser ça.

J'ai une autre question (je ne sais pas si c'est mieux que j'ouvre un autre sujet).

Je veux faire la même chose mais à la place d'un int c'est un double, et là problème... :
Code: [Select]

double test=2.55;
sprintf( buffer_valeurs, "GET /val.php?id=1&val=%f HTTP/1.0", test );


Là je récupère un 0. Donc ça ne fonctionne pas.
Ps : j'ai essayé %f et %lf.



J'ai essayé de faire ça :
Code: [Select]

sprintf( buffer_valeurs, "GET /val.php?id=1&val=2.55 HTTP/1.0" );

Et ça fonctionne.

Ça doit être un problème de type mais je ne vois pas lequel...

Edit : Après recherche, %f ne marche pas avec sprintf...

barbudor

Je constate aussi que "%f" ne marche pas. Bizarre.

A l'image de itoa(), les fonctions équivalentes pour doubles sont :
Code: [Select]
/**
   \ingroup avr_stdlib
   The dtostre() function converts the double value passed in \c val into
   an ASCII representation that will be stored under \c s.  The caller
   is responsible for providing sufficient storage in \c s.

   Conversion is done in the format \c "[-]d.ddde±dd" where there is
   one digit before the decimal-point character and the number of
   digits after it is equal to the precision \c prec; if the precision
   is zero, no decimal-point character appears.  If \c flags has the
   DTOSTRE_UPPERCASE bit set, the letter \c 'E' (rather than \c 'e' ) will be
   used to introduce the exponent.  The exponent always contains two
   digits; if the value is zero, the exponent is \c "00".

   If \c flags has the DTOSTRE_ALWAYS_SIGN bit set, a space character
   will be placed into the leading position for positive numbers.

   If \c flags has the DTOSTRE_PLUS_SIGN bit set, a plus sign will be
   used instead of a space character in this case.

   The dtostre() function returns the pointer to the converted string \c s.
*/
extern char *dtostre(double __val, char *__s, unsigned char __prec,
     unsigned char __flags);

/**
   \ingroup avr_stdlib
   The dtostrf() function converts the double value passed in \c val into
   an ASCII representationthat will be stored under \c s.  The caller
   is responsible for providing sufficient storage in \c s.

   Conversion is done in the format \c "[-]d.ddd".  The minimum field
   width of the output string (including the \c '.' and the possible
   sign for negative values) is given in \c width, and \c prec determines
   the number of digits after the decimal sign. \c width is signed value,
   negative for left adjustment.

   The dtostrf() function returns the pointer to the converted string \c s.
*/
extern char *dtostrf(double __val, signed char __width,
                     unsigned char __prec, char *__s);


extrait de stdlib.h
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

saraza

Vu que je n'avais que 2 chiffres après la virgule, j'ai fais un *100 puis ensuite au niveau PHP, je fais un /100.

Go Up