Les String, les char, je ne m'en sors toujours pas

Bonjour à toutes et à tous,

Avec un OLED et la bibliothèque "u8g2", je voudrais afficher les valeurs suivantes :

  • un axe : soit T: ; soit R:
  • la valeur de cet axe : un flottant
  • l'unité : soit ° ; soit %

Si, par exemple, j'écris : u8g2.drawStr(10, 20, "T: 12.25 \xB0");, ça affiche bien : T: 12.25 °

Maintenant, je souhaite utiliser une fonction pour ce faire ; du style : affVal(char axe, float val, char unit, posX, posY) {}
mis à part le float que je convertis avec dtostrf et qui s'affiche correctement, que j'utilise des char ou des String pour passer les valeurs de axe et unit, je n'arrive pas à afficher les symboles corrects pour ces valeurs en utilisant la fonction sprintf pour la conversion.

Des idées ?

Cordialement.

Pierre.

Donne ton code.

Merci fdufnews.

Pas de code ou plutôt tout un tas d'essais non fonctionnels avec sprintf.
J'aurai voulu utiliser cette instruction pour former une chaîne de caractères comprenant les données axe, valeur et unit.

J'ai résolu mon problème avec l'instruction général print() de la manière suivante :

void affAxe(String axe, float val, String unit, uint8_t posY) {
  u8g2.setCursor(5, posY);
  u8g2.print(axe);
  u8g2.setCursor(u8g2.getCursorX()+5, posY);
  char buff[10];
  dtostrf(val, 4, 2, buff);
  u8g2.print(buff);
  u8g2.setCursor(u8g2.getCursorX()+5, posY);
  u8g2.print(unit);
}

Cordialement.

Pierre.

Tout est expliqué ici

Sur quel type d’arduino?

Sur les petits AVR printf ne sait pas gérer les floats.

Pour y pallier, je passe par dtostr().

Cordialement.

Pierre.

Merci pour ce lien.

Cordialement.

Pierre.

Oui c’est ce qu’il faut faire