Bonjour a tous,
je rencontre quelque problème avec le fonctionnement de sprintf_P.
dans mon projet tous s'affiche sur un LCD1602 en I2C
Pour gagner de l'espace dans la SRAM j'ai inscrit toutes mes string d'affichage dans la flash soit avec F(...) dans le cas de print et cela marche sans problème,
Par contre pour des affichages avec formatage de valeur flottante j'utilise sprintf_P avec PSTR() et là seul le texte fixe s'affiche et j'ai un point d’interrogation à la place de la valeur.
voici le code pour simplifier j'ai utilise serial a la place du LCD mais même résultat:
#include <avr/pgmspace.h>
#include <LibPrintf.h>
char txtlig[17] = "";
float PosTrv = 0.0;
float PosABS = 0.0;
void setup() {
Serial.begin(115200);
while (!Serial)
; // wait for serial port to connect. Needed for native USB
Serial.println("OK");
}
void loop() {
static bool flag = true;
if (flag) {
//LCD.setCursor(0, 0);
sprintf_P(txtlig, PSTR("Pos Trv: %2.2f "), PosTrv);
//LCD.print(txtlig);// cette ligne donne a l'écran: [Pos Trv: ? ]
Serial.println(txtlig);
//LCD.setCursor(0, 1);
sprintf(txtlig, "Pos Absol: %2.2f", PosABS);
//LCD.print(txtlig);// cette ligne donne à l'écran: [Pos Absol: 0.00 ]
Serial.print(txtlig);
flag = false;
}
}
J'ai fouillé un peut partout sur le net mais je n'ai pas trouvé d'indice si ce n'est que sprinf_P est defini dans stdio.h et sprintf dans printf.h.
si quelqu'un a une solution a me proposer je suis preneur.
cordialement