float Str2F (char chaine )
{
float f; char c;
c = chaine.substring ( 3 , chaine.length - 3 );
f = float ( c );
return f;
}
Là il y a mélange des genres plus erreur de type.
D'abord: char chaine définit une variable de type char, c-à-d un caractère uniquement.
Pour définir une chaîne de caractère, il faut déclarer un tableau de char (donc il faut définir une taille de chaîne) char chaine[20]. Définition d'une chaîne de 20 caractères (terminateur de chaîne inclus)
Alternative au tableau de char il y a les objets String définis dans les librairies arduino qui permettent de manipuler des chaînes de caractères. Tu trouveras les explications dans l'aide de l'IDE arduino ou sur le site arduino (je ne te mets pas le lien, je n'arrive pas à accéder au site arduino aujourd'hui)
Ensuite quand je parle de mélange des genre c'est que justement tu mélanges les méthode de la classe String (.substring) avec le type char
Voilà qui est très positif !
Je pense que quand on a rien à dire,...
vohu:
Je crois qu'il faut que tu reprennes un cours de C au début, et surtout que tu ne mélanges pas avec C++, en utilisant pas la classe String.
C'est un début de solution que je cherche pas une polémique.
Dis moi ce dont tu as besoin,... je te dirai comment t'en passer !
Ce petite fonction va s'insérer dans un programme de plusieurs centaine de lignes et qui fonctionne en grande partie. Tout modifier sous prétexte que personne n'a une solution est... excessif.
Ce n'est pas parce qu'on débute en C qu'on débute en tout !
Quand j'ai à faire à quelqu'un qui me dit avoir un problème, je l'aiguille au minimum. et quand je dis un minimum c'est très au dessus de votre maximum !
Comme déjà dit, je cherche un début de solution et pas qu'on me renvoie dans mes quarante mètres.
vohu:
Problème:
pour commencer :
float Str2F (char chaine )
Solution:
si chaine doit être une chaine comme son nom l'indique, ta fonction devient alors : float Str2F (char *chaine ) ou float Str2F (char chaine[] )
Problème:
Je ne comprends pas l'interet de la fonction appelant() Elle ne renvoit rien, et ne modifie rien non plus. NombreFlottant n'existant plus après l'appel de la fonction. correction : (en fait elle ne modifie que Liste [1])
Solution:
Je crois qu'il faut que tu reprennes un cours de C au début, et surtout que tu ne mélanges pas avec C++, en utilisant pas la classe String.
Je pense que c'est pas la peine de s'embrouiller la tête avec des fonctions atoi() ou autre, alors que tu confonds encore les char et les char*. Ajouter en plus la lib String ne fait qu'ajouter des problèmes...
Je pense toujours que ma réponse est justifiée...
D'ailleurs, plusieurs membres t'ont donné des réponses qui n'ont pas suffit, dont celle que tu recherches
Me dire avec quoi je ne dois pas "m'embrouiller la tête" ne fera pas avancer la bête.
Je demande de l'aide et votre aide ne me suffit pas, visiblement. Je pense que ce n'est pas difficile à comprendre. Soit vous continuez sur cette voie et me faite perdre mon temps soit vous devenez plus créatif et me guidez un peu plus sur ce que je ne vois pas et que peut-être, vous ne voyez pas non plus.
Dois-je ré-inventer le fil à couper le beurre ou existe t'il une fonction ?
Le basic le fait depuis 35 ans, le Pascal depuis je ne sais plus... Delphi pareil. Si je demandais comment assigner une chaine à une autre, sans doute me diriez vous chaine1 = chaine2 est la solution. Quel est le problème ici ?
Pour quelqu'un qui nous sort depuis combien d'années certains langages font une pauvre conversion, si tu ne voulais pas perdre ton temps il suffisait d'une seule recherche sur google...
Les 2 premiers résultats, et sans doute beaucoup de suivants...
Ça ne suffit pas ? ou il faut que je recopie ici ?
Benh... ce n'est pas grâce à vous lol... c'est sur un autre site que j'ai eu la réponse... elle y est et en plusieurs exemplaires. Je ne regrette pas d'avoir commencé ma recherche sur ce site malgré tout... juste vous.
// Un tableau à deux dimensions
char Liste[10][20];
// Une Fonction sensée convertir le paramètre en Flottant (float) :
// le paramètre est de la forme "ABC123.456"
// La sortie doit être le float 123.456
float Str2F (char* chaine )
{
float f; char c[20];
strcpy(c,chaine+3);
f = atof ( c );
return f;
}
void Appelant()
{
strcpy(Liste [1],"AZE123.45678");
float NombreFlottant = Str2F ( Liste[1] );
Serial.print(NombreFlottant);
}
void setup(void){
Serial.begin(9600);
Appelant();
}
void loop(void){
}
C'est le comportement par défaut de la classe Print sur laquelle est basée Serial.
size_t println(double, int = 2);
size_t print(double, int = 2);
Il faut passer comme 2eme paramètre le nombre de décimales.
Autre solution utiliser sprintf() qui s'applique a des chaînes de caractères (c'est à dire en C, à des tableaux de caractères utilisant le caractère nul '\0' pour marquer la fin). avr-libc: <stdio.h>: Standard IO facilities
He bien... génial!! un grand merci pour ces réponses ...constructives... et rapides. Le rôle des hôpitaux n'étant par de se moquer de la charité.
Heu... au passage,... ne tirez par sur le canard bleu, c'est un faux... canard ...un Appelant() quoi !