Conversion de "String" à "Integer"

Bonjour à tous.

Je rencontre un problème dont je pense avoir compris la source mais je ne vois pas comment le résoudre ou du moins je ne vois pas qu'elle fonction ou commande utiliser.

L'idée c'est d'afficher sur un écran OLED la valeur numérique que prend une variable de type "int" que l'on nommera B.

Voici un court extrait de mon code actuel :

  {B ++;};                                   // Ajoute 1 à la valeur de B
  Serial.println (B);                        // Affiche la nouvelle valeur de B sur le moniteur série
  
  u8g.setFont(u8g_font_6x10);       // Fonction de la librairie U8Glig qui "pilote" l'écran OLED
  u8g.setFontPosTop();
  u8g.drawStr(40, 114, B);             // Fonction de la librairie U8Glig qui positionne en X et Y le texte à  // afficher et indique ce qui doit être affiché en troisième argument.

Si je supprime la partie relative à l'affichage sur le OLED, la valeur de B ( 1 , 2 , 3...) s'affiche bien dans le moniteur série (normal).

Le caractère "B" contenu dans la ligne u8g.drawStr(40, 114, B); porte à confusion pour la bibliothèque u8glib. Si je le met entre guillemets, l'écran Oled va simplement afficher B et non sa valeur ( normal à nouveau).

Si je ne met pas les guillemets la compilation n'est pas possible car le code est ambigu.

Je pense que la bibliothèque u8glib ( ou le compilateur ) , ne peut tout simplement pas afficher la "valeur" associée à la variable B. De son point de vue il ne doit s'agir que d'un élément de type "Char" ou "String" (Normal avec une fonction drawStr . Enfin, c'est mon analyse...)

Voici donc enfin ma question !

Comment faire pour convertir ce "B" en sa valeur numérique, de sorte à l'intégrer dans l'affichage ?

J’espère avoir exposé de façon explicite et surtout intelligible la problématique.

Je vous remercie par avance pour votre aide.

Bonjour,
Je n'ai pas encore fait d'affichage OLED (Très très newbie)
mais j'aurais bien essayé qqc comme :

char buf[2]; // Longueur à adapter éventuellement...
sprintf (buf, "%d", B);
u8g.drawStr(40, 114, buf);

Bien que j'utilise souvent sprintf, dans ce cas précis il est préférable d'utiliser la fonction itoa.

C'est vrai guix, bizarre il ne me vient jamais à l'esprit en premier celui-là :confused:

J'ajoute que le buffer doit être suffisant pour recevoir la chaîne. Un entier peut faire jusqu'à 6 caractères donc déclarer char buf[7];

Merci à vous pour vos réponses.

dmganges : Ta proposition de code fonctionne. Je l'ai intégré dans mon code et ça marche sans problème apparent.

Guix : Pour la fonction itoa, je l'avais survolé et j'avais lu des posts qui en parle, mais je n'avais pas vraiment compris son fonctionnement. Je vais prendre un peu de temps pour essayer de la comprendre.

Kamill : merci pour le conseil de porter le buf à 7 car j'ai testé avec 2 et une fois arrivé à 100 affiché, je constate que le fonctionnement semble perturbé. J'avais donc monté le buf à 4 pour me laisser un peu de marge, mais finalement autant aller au bout de la démarche : ça ne coutera pas plus cher.