Bonsoir à toutes et à tous,
Suite à un problème dans un sketch bien plus important, j'ai isolé ce problème que je reporte dans le sketch suivant. Cela fonctionne avec une mega2560 et un écran tactile 320 x 240 possédant un lecteur de carte SD.
Tel qu'il est, la conjonction des instructions "dtostre" et "writeLn" fait que ça plante systématiquement à la 237 éme itération !!!
- Si vous remplacez le "dtostre" par le "dtostrf" ça va planter aussi mais à une autre itération et pas de manière systématique sur la même.
- Si on utilise le texte "Pierre" à la place des "dtostrf ou e", ça ne plante plus.
J'ai essayé de faire varier différents choses :
- la vitesse de transfert de la SD,
- la précision des "dtostrf ou e",
- la taille du buffer,
- introduire un délai entre les "dtostrf ou e" et le writeLn,
#include <UTFT.h>
#include <tinyFAT.h>
UTFT myGLCD(ITDB32S, 38, 39, 40, 41);
extern uint8_t SmallFont[];
char bufD[32];
void setup() {
myGLCD.InitLCD(PORTRAIT);
myGLCD.clrScr();
myGLCD.fillScr(VGA_WHITE);
myGLCD.setFont(SmallFont);
myGLCD.setColor(VGA_BLACK);
myGLCD.setBackColor(VGA_WHITE);
myGLCD.print("ESSAI", CENTER, 20);
file.initFAT(/*SPISPEED_MEDIUM*/);
file.create("MonTexte.txt");
file.openFile("MonTexte.txt", FILEMODE_TEXT_WRITE);
double dd;
/* bufD[0] = 'P';
bufD[1] = 'i';
bufD[2] = 'e';
bufD[3] = 'r';
bufD[4] = 'r';
bufD[5] = 'e';
bufD[6] = 0;*/
for (int i = 0; i < 1000; i++) {
dd = 1.0*i;
// dtostrf(dd, 3, 15, bufD);
dtostre(dd, bufD, 15, 0);
file.writeLn(bufD);
myGLCD.print(bufD, CENTER, 60);
}
file.closeFile();
}
void loop() {
// put your main code here, to run repeatedly:
}
Voilà, je n'arrive pas à trouver de solution.
Si vous avez une idée de là où ça vient et plus précisément ce qu'il faut faire pour que cela ne plante plus ...
Merci de votre aide.
Pierre