[Résolu] Traitement requete GET avec webduino

HopHopHop mon coco ya un soucis dans ton url ! :wink:
Et ya un gros soucis dans ton sscanf aussi ! (bon ok j'avais moi même oublié :*)

void newsimu(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete) {
  server.println(url_tail);// il affiche newsimu;25;0;25;24;26 <- il devrait y a voir 6 champs et non 5 !
  if (type == WebServer::GET) {
  
    double consigne , intervalle , p , i , d ;
    int type ;
    if(sscanf(url_tail, "newsimu;%lf;%d;%lf;%lf;%lf;%lf", &consigne, &type, &p, &i, &d, &intervalle) == 6){ // sscanf attend des pointeurs sur variables !
    // <- ne pas oublier le test du nombre de champs lus
      server.println(url_tail);
      Serial.println(consigne);
      Serial.println(type);
      Serial.println(p);
      Serial.println(i);
      Serial.println(d);
      Serial.println(intervalle);
    }
  }
 }

Ah ok ok j'avais meme pas remarqué qu'il me manquait un champ x) .

J'ai essayer le correctif et je n'arrive pas a avoir le 6eme champs et puis j'ai essayer de voir juste avec 5 champs quand même pour voir si ca fonctionnait et puis b ca fonctionne pas x) .

C'est la loose :frowning: . je continue de regarder :slight_smile: je te tiens au courant .

Roxas77:
J'ai essayer le correctif et je n'arrive pas a avoir le 6eme champs et puis j'ai essayer de voir juste avec 5 champs quand même pour voir si ca fonctionnait et puis b ca fonctionne pas x) .

J'ai testé le morceau de code du sscanf() sur ordinateur :

#include <stdio.h>

int main(int argc, char** argv) {
	double consigne, intervalle, p, i, d;
    int type ;
    
	if(argc == 1) return 1;
	
	if(sscanf(argv[1], "newsimu;%lf;%d;%lf;%lf;%lf;%lf",&consigne, &type, &p, &i, &d, &intervalle) == 6) {
		printf("consigne: %lf\n", consigne);
		printf("type: %d\n", type);
		printf("p: %lf\n", p);
		printf("i: %lf\n", i);
		printf("d: %lf\n", d);
		printf("intervalle: %lf\n", intervalle);
    }
	
	return 0;	
}

Et ça à l'air de marcher :

test.exe newsimu;25;0;25;24;26;13
consigne: 25.000000
type: 0
p: 25.000000
i: 24.000000
d: 26.000000
intervalle: 13.000000

Regarde bien ce que tu reçois dans url_tail mais normalement ça devrait le faire ...

C'est bon j'ai réussi !!!!!! :stuck_out_tongue_closed_eyes: j'en suis venu a bout :smiley:
Apparemment il gérait pas les %lf , donc j'ai tout mis en "int" et j'ai essayer avec les valeurs 9999 et il me les prend en compte cependant je doit avoir des nombres a virgules donc il faut que j'arrive a trouver une solution .

Roxas77:
Apparemment il gérait pas les %lf , donc j'ai tout mis en "int" et j'ai essayer avec les valeurs 9999 et il me les prend en compte cependant je doit avoir des nombres a virgules donc il faut que j'arrive a trouver une solution .

MAIS OUI ... je suis vraiment c*n parfois !
La avr-libc ne supporte pas (de base) les flottants dans les fonctions de stdio (scanf, printf, ...) d'où les fonctions spécialisés dtostrf(), etc ...
(c'est une histoire de place, le support des flottants demande un max de place en flash)

Il y a une option du linker pour activer le support des flottants mais avec l'ide arduino c'est impossible de le mettre ...
Essaye de chainer plusieurs strtod() (en sautant le ; entre chaque champ) :
http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html#ga5ee4d110a3bb55d2eadda05e3ebedf8a

Ouais ok ok merci mais le souci c'est que "url_tail" il bloque a un certain nombre de caractère ( 26 je crois ) du coup si en plus je met les double b ca va être la galère ... donc j'ai cherché dans la lib WebServer.h mais je trouve pas ou il a pu être définie a 26 parce que une URL normalement n'est pas limité enfin la y'a un hic quelque part et je ne vois pas ou c'est .

Dans tout les cas j'ai essayer le atof je le trouve plus simple a utilisé :wink: et ça à l'air de fonctionner . Me manque plus qu'a régler ce problème de longueur et a couper la chaine pour la fonction "newsimu" mais du coup si je coupe la chaine avant le sscanf il ne sert plus a rien enfin je ne vois pas ce que tu pense ?

Ligne 51 je vois :

#define WEBDUINO_DEFAULT_REQUEST_LENGTH 32

Ça doit surement être ça qui défini la taille max de l'url.

Sinon oui avec atof plus besoin de sscanf().

Yep c'etait ca ^^ je l'ai mis a 64 ca devrait aller maintenant XD .

C'est bon ça fonctionne bien j'ai réussi a tout récupérer :smiley: Je te remercie pour tes conseils ^^ .
A bientot parce que mon projet n'est pas encore terminé :stuck_out_tongue: .