Conversion d'un tableau de float en chaine de caractère

Bonjour, j'aimerai convertir un tableau de valeur float en char ou en string, quelqu'un saurait m'aider?
J'ai fais ceci qui ne fonctionne pas.

   float tabVal[]={10.12,14,18.6};
  char tabChaine[30];
  sprintf(tabChaine, "%f-%f-%f",tabVal[0],tabVal[1],tabVal[2]);

Merci d'avance

Bonjour,

Le format %f ne fonctionne pas par défaut avec les processeurs avr
Tu peux utiliser dotostrf()

Merci pour votre réponse rapide, vous parlez de dtostrf j'imagine? J'arrive a convertir un float mais pas un tableau de float...

Oups! Effectvement dtostrf()
Pour le tableau, il suffit de faire une boucle.

J'ai essayé en faisant comme ça :

   float tabVal[]={10.12,14,18.6};
  char tabChaine[30];
  for(int i=0;i<3;i++)
  {
    dtostrf(tabVal[i],30,2, tabChaine);
  }
  Serial.println(tabChaine);

Mais il m'affiche que le dernier nombre de "tabVal" ce qui est normal je pense, il faudrait que quand je tourne dans le tableau, les valeurs viennent se mettre à la suite de la chaine de caractère, comment je peux faire? Ou concaténer?
Merci de votre aide

Une solution lourde serait

char final[100]="";
  char tabChaine[30];
  for(int i=0;i<3;i++)
  {
    dtostrf(tabVal[i],30,2,tabChaine );
    strcat(final, tabChaine);
  }

====
edited : avez vous besoin de 30 caractères pour coder un float avec deux chiffres décimaux?
Une solution moins obèse -je réserve 100 octets; même si je devais n'en reserver que 30*3 + 1, c'est gros -serait d'imprimer au fur et à mesure que les sous chaînes sont créées...)
Si vous avez besoin de 30 caractères, dimensionnez tabChaine à 31 (pour le terminer par NULL...)

Je savais pas si le 30 était pour l'ensemble du tableau de float ou si c'était pour une seul float. Merci de votre aide, je pense que ça va fonctionner maintenant.

à quoi va servir tabChaine ?? en avez vous vraiment besoin?

Je dois envoyer un tableau de float sur un BDD MYSQL par PHP et je pense que cela sera plus facile avec une chaine de caractère

vous pouvez l'envoyer en plusieurs bouts...

client.print(tabVal[0],2); // le 2 pour 2 chiffres après la virgule
client.print("-");
client.print(tabVal[1],2);
client.print("-");
client.print(tabVal[2],2);

Je pense au deux mais je voulais essayer les deux parce que je dois envoyer un tableau[6][3] ce qui est assez long à envoyer. Ca va faire un GET fort à rallonge que je devrais probablement faire en plusieurs fois

La façon de générer le GET n’a aucune importance du côté réception... et si vous savez un tableau c’est hyper simple de faire deux boucles imbriquées pour générer la requête

Si votre GET est trop long passez en POST

D'accord merci de votre aide, j'avais déjà essayé avec une boucle mais ça n'avait pas trop été. Je vais réessayer et je reviens vers vous si ça ne va pas.

ce n'est quand même pas très compliqué d'écrire une boucle qui parcourt le tableau

voici un exemple

uint8_t tableau[6][3] = {
  {0, 1, 2},
  {1, 12, 13},
  {2, 21, 22},
  {3, 31, 32},
  {4, 41, 42},
  {5, 51, 52}
};

void setup() {
  Serial.begin(115200);

  for (uint8_t i = 0; i < 6; i++) {
    for (uint8_t j = 0;  j < 3; j++) {
      Serial.print(F("tableau["));
      Serial.print(i);
      Serial.print(F("]["));
      Serial.print(j);
      Serial.print(F("] = "));
      Serial.print(tableau[i][j]);
      if (j != 2) Serial.print(F("\t")); // on ne sépare avec une tabulation que si on n'est pas au dernier élément
    } // fin de boucle j
    Serial.println(); // on saute une ligne (par exemple)
  } // fin de boucle  i
}

void loop() {}

vous verrez dans la console série (réglée à 115200 bauds)

[color=blue]
tableau[0][0] = 0	tableau[0][1] = 1	tableau[0][2] = 2
tableau[1][0] = 1	tableau[1][1] = 12	tableau[1][2] = 13
tableau[2][0] = 2	tableau[2][1] = 21	tableau[2][2] = 22
tableau[3][0] = 3	tableau[3][1] = 31	tableau[3][2] = 32
tableau[4][0] = 4	tableau[4][1] = 41	tableau[4][2] = 42
tableau[5][0] = 5	tableau[5][1] = 51	tableau[5][2] = 52
[/color]

ou si vous voulez tout écrire sur une seule ligne (comme pour un GET)

uint8_t tableau[6][3] = {
  {0, 1, 2},
  {1, 12, 13},
  {2, 21, 22},
  {3, 31, 32},
  {4, 41, 42},
  {5, 51, 52}
};

void setup() {
  Serial.begin(115200);
      Serial.print(F("GET /envoyer?"));
  for (uint8_t i = 0; i < 6; i++) {
    for (uint8_t j = 0;  j < 3; j++) {
      Serial.print(F("t"));
      Serial.print(i); // pas de séparateur des indices car on sait qu'ils ne sont que sur 1 caractère
      Serial.print(j);
      Serial.print(F("="));
      Serial.print(tableau[i][j]);
      if ((i != 5) && (j != 2)) Serial.print(F("&")); // on ne met rien à la toute fin
    } // fin de boucle j
  } // fin de boucle  i
}

void loop() {}

vous donnera

[color=purple]
GET /envoyer?t00=0&t01=1&t02=2t10=1&t11=12&t12=13t20=2&t21=21&t22=22t30=3&t31=31&t32=32t40=4&t41=41&t42=42t50=5t51=51t52=52
[/color]

Merci beaucoup, j'ai fait un défilement de tableau du même style et qui fonctionne aussi mais sans la tabulation après chaque donnée. Maintenant il faut que j'arrive a récupérer tout ça en php... Merci de votre aide :slight_smile: