Salut ,
désolé de te déranger encore mais mon code ne fonctionne toujours pas j'ai mis campagne comme tu m'as dit , je l'ai rajouté a la chaine de sscanf je pense que je n'ai pas compris quelque chose qui me bloque , voila ce que j'ai changé :
void newsimu(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete)
{
if ( type == WebServer::GET )
{
double consigne , intervalle , p , i , d ;
int type ;
int j ;
j = 0 ;
char tab[52] ;
char c ;
c = server.read();
do {
while(server.available() < 8);/* Attente de la chaine "campagne" */
}while(server.read() != 'campagne' );/* Tant que chaine != campagne */
while( c != '!' ){
c = tab[j] ;
if ( c ='!'){
tab[j] = '\0';
}
j++ ;
}
if(sscanf(tab, "campagne?newsimu;%d;%d;%d;%d;%d;%d!", consigne, type, p , i , d , intervalle )== 6){
Serial.println(consigne);
Serial.println(type);
Serial.print(p);
Serial.print(i);
Serial.print(d);
Serial.print(intervalle);
}
Tout d'abord je te remercie pour le lien ça m'a aider pour autre chose ^^ .
Ca ne fonctionne toujours pas , pourtant je fais comme tu m'as dit et essayer d'autres choses comme :
if(sscanf(url_tail, "?newsimu;%lf;%d;%lf;%lf;%lf;%lf", consigne, type, p , i , d , intervalle) == 6) // ce que tu m'as dit
//if(sscanf(url_tail, "commande?newsimu;%lf;%d;%lf;%lf;%lf;%lf", consigne, type, p , i , d , intervalle) == 6) // ce que j'ai essayer désespérément
void setup(){
//...
webserver.addCommand("commande", &newsimu);
//...
}
Fait un truc bateau dans ta fonction : affiche le contenu de url_tail avec Serial.println() pour voir à quoi il ressemble et si ton callback est bien appelé
HopHopHop mon coco ya un soucis dans ton url !
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 . je continue de regarder 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 :
C'est bon j'ai réussi !!!!!! j'en suis venu a bout
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)
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é 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 ?
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 Je te remercie pour tes conseils ^^ .
A bientot parce que mon projet n'est pas encore terminé .