Float dans un char * je séche....

Bonjour,

je sèche un peut sur les pointeurs ça fait longtemps que je les ai pas utilisé.

J’utilise la librairie displayshield4d pour gérer mon afficheur avec la fonction:

uint8_t drawstringblock(uint8_t x, uint8_t y, uint8_t font, unsigned int color, uint8_t width, uint8_t height, char *text);

Les caractères que affiché ce trouve dans char *text dans mon code je voudrai afficher une variable float ( entre 0 et 999,0)mais impossible te retrouvé comment faire j’ai essayer des tableaux, du transtipage…

merci a ceux qui pourront de donner un petit coup de main.

sprintf(text, "%5.1f",maVariableFloat);
sprintf(text, "%05.1f",maVariableFloat); // pour remplir avec des zéros à gauche

Merci fdufnews

j’ai fait un petit bout de code de test mais rien à faire rien de s’affiche !

#include <displayshield4d.h> 
 
DisplayShield4d  oled;
char* text;
float maVariableFloat = 00.1;

void setup()
{
  Serial.begin(57600);  
  oled.Init();
}

void loop()
{
  
  int i;
  sprintf(text, "%5.1f",maVariableFloat);
  oled.Clear();
  
  oled.setfont(OLED_FONT5x7);
  oled.setfontmode(OLED_FONT_TRANSPARENT);
  oled.Clear();
  oled.drawstringblock(5, 5, 0, oled.RGB(255, 255, 0), 4, 4, "Demo!");
  oled.drawstringblock(5, 5, 0, oled.RGB(255, 255, 0), 4, 4, text);
  
  delay(1000);
}

fdufnews:

sprintf(text, "%5.1f",maVariableFloat);

sprintf(text, "%05.1f",maVariableFloat); // pour remplir avec des zéros à gauche

Sauf que le support des floats est désactivé pour sprintf :slight_smile:

Il faut installer ça pour l'activer: Arduino Forum

Sinon il y a aussi les fonctions dtostre et dtostrf, voir ici: avr-libc: <stdlib.h>: General utilities

Mais je ne suis pas sûr de comprendre ta question supermac1...

text pointe sur rien.
il faut déclarer un tableau

char text[10]; //adapter la longueur au besoin

J'utilise la lib TinyGPS avec la fonction float f_speed_mph() pour extraire l'information vitesse de mon module gps.

Ensuite je veut l'afficher grâce à mon module uLCD-144 www.4dsystems.com.au/prod.php?id=127.

Pour le piloter il y a la lib displayshield4d et la fonction uint8_t drawstringblock(uint8_t x, uint8_t y, uint8_t font, unsigned int color, uint8_t width, uint8_t height, char *text);

Mais impossible de trouver la bonne combinaisons de code pour faire cela :~ .

J’espère avec était un peut plus clair.

Regarde cet exemple qui fonctionne: http://codepad.org/c2bbLyd2 , mais encore une fois, tu dois installer le truc que je donne dans mon post précédent sans quoi sprintf n’acceptera pas de formater des floats.

et le atof() ?

double atof ( const char * str );

atof transforme un string en float... ca serait plutôt dtostrf ou dtostre, qui ont déjà été proposés plus haut :slight_smile:

j'ai téléchargé le fichier que tu ma dis peut tu me confirmer l'emplacement ou je doit mettre ça, sachant que je suis sous windows.

Oui,

  • Tu va dans le dossier d’installation de l’Arduino IDE, puis “hardware\tools\avr\avr”, là tu as un dossier “lib”,
  • Tu fais une copie de ce dossier (au cas où…),
  • Puis tu extrait les fichiers du .zip dans le dossier “lib”, tu clic “Remplacer tout” quand il te demande.

Et voilà c’est installé, tu devra sûrement redémarrer l’Arduino IDE

Bonjour,

Installer l'implémentation complète de printf() avec le support des floats pour un malheureux %f c'est pas super intelligent :wink:
Si le support des floats est désactivé par défaut c'est qu'il y a une raison, de même pour dtostrf(), cette fonction n'est pas là pour faire jolie.

Printf() en soit c'est déja très lourd (~1.5Ko de flash), la version avec float c'est encore pire ...
La fonction dtostrf() a été codé pour palier à ce manque de %f tout en restant le plus léger possible, autant l'utiliser :wink:

1.4ko de plus, mais oui tu as raison si la mémoire doit être économisée alors oui ça peut poser problème :slight_smile: Moi perso j'ai une mega 2560 alors même pas 1% de plus ou de moins...