carte sd mauvaise donnée

Bonjour, j’ai un problème lorsque j’essaye de récupérer des données sur un fichier stocké sur une carte micro sd relier à un shield tft. Je récupérer des chiffres complétement aléatoire. Voici mon code:

dataProg = SD.open("prog.txt");
  int i = 0;
  while(dataProg.available()){
    datasd[i] = dataProg.read();
    i++;
  }
  dataProg.close();
  for(int j = 0; j < sizeof(datasd); j++){
    Serial.println(datasd[j]);
  }

alors qu’avec l’exemple de la librairie SD ça fonctionne. Merci d’avance pour votre aide

Si tu donnais un exemple de ce que tu attends et de ce que tu reçois ce serait surement plus facile de t'aider.

Bonjour,

Quelle est la taille et le type de datasd ?

La il y a une source d’erreur potentielle si on dépasse le tableau

 while(dataProg.available()){
   datasd[i] = dataProg.read();
   i++;
 }

Il devrait y avoir un test pour voir si on ne dépasse pas la table

 while(i < sizeof datasd && dataProg.available()){
   datasd[i] = dataProg.read();
   i++;
 }

Ensuite à l’affichage tu ne devrais afficher que les caractères reçus

  for(int j = 0; j < i; j++){

Ceci dit je ne suis pas sur que ce soit la source de tes problèmes et je ferai la même remarque que fdufnews: qu’est ce que tu attends ? et qu’est ce qui se produit ?

bonjour, j'attend un nombre issu d'une suite de chiffre stocké dans un fichier txt: "1100000000000[...]1600000000000", j'utilise la fonction seek() puis deux fois read() pour récupérer deux chiffre,

mais lorsque je fais ça ou que je fais un code different de l'exemple de la librairies SD, j'obtiens des nombres qui n'ont aucun rapport avec mon fichier, par exemple: "491310491310481310481310481310481310481310481310481310481310481310481310481310[...]"

et ça uniquement en changeant le Serial.write(dataFile.read()); en

Serial.print(dataFile.read());

Apparament tu affiches le code ascii tes caractères lus en décimal. Serial.print() affiche différemment suivant que le paramètre est un entier (int, byte, uint8_t, ...) ou un char Si tu veux l'afficher sous forme de caractère il faut le transformer en caractère Serial.write((char )dataFile.read());

Serial.write affiche le caractère ou le nombre brut qui sera interprété en réception comme un caractère.

R3dThek: "491310491310481310481310481310481310481310481310481310481310481310481310481310[...]"

49 = code ASCII du caractère 1 48 = code ASCII du caractère 0 13 = code ASCII du retour chariot 10 = code ASCII du saut de ligne

bonjour, merci ça fonctionne