lecture de carte SD en variables

Bonjour a tous ,

Je cherche une solution a mon travail, après avoir retourné ce problème dans tous les sens je me tourne vers vous...

voici la chose :

j'utilise une carte Arduino UNO et un SHIELD seeed studio SD Card, au niveau de l’accès a la carte tout fonctionne, en revanche j'aimerais premièrement connaitre les fichier présents dans la carte SD, ,j'ai donc trouvé un bout de code permettant de lire les ces infos

#include <SPI.h>
#include <SD.h>


Sd2Card card;
SdVolume volume;
SdFile root;

// change this to match your SD shield or module;
// Arduino Ethernet shield: pin 4
// Adafruit SD shields and modules: pin 10
// Sparkfun SD shield: pin 8
const int chipSelect = 4;

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);a
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }


  Serial.print("\nInitialisation de la carte SD ...");

  // we'll use the initialization code from the utility libraries
  // since we're just testing if the card is working!
  if (!card.init(SPI_HALF_SPEED, chipSelect)) {
    Serial.println("initialisation echouee.");
    return;
  } else {
    Serial.println("une carte est presente.");
  }

  // print the type of card
  Serial.print("\nCard type: ");
  switch (card.type()) {
    case SD_CARD_TYPE_SD1:
      Serial.println("SD1");
      break;
    case SD_CARD_TYPE_SD2:
      Serial.println("SD2");
      break;
    case SD_CARD_TYPE_SDHC:
      Serial.println("SDHC");
      break;
    default:
      Serial.println("Unknown");
  }

  // Maintenant, nous allons essayer d'ouvrir le «volume» / «partition» - il devrait être FAT16 ou FAT32
  if (!volume.init(card)) {
    Serial.println("Impossible de trouver FAT16 / FAT32. / Assurez-vous que vous avez formaté la carte");
    return;
  }


  // imprimer le type et la taille du premier volume de type FAT
  uint32_t volumesize;
  Serial.print("\nType de Volume : FAT");
  Serial.println(volume.fatType(), DEC);
  Serial.println();

  volumesize = volume.blocksPerCluster();    // clusters are collections of blocks
  volumesize *= volume.clusterCount();       // we'll have a lot of clusters
  volumesize *= 512;                            // SD card blocks are always 512 bytes
  volumesize /= 1024;
  Serial.println(volumesize);
  Serial.print("Taille du volume (Mbytes): ");
  volumesize /= 1024;
  Serial.println(volumesize);


  Serial.println("\nFichiers trouve sur la carte (nom, date et taille en octets): ");
  root.openRoot(volume);


  // lister tous les fichiers de la carte avec la date et la taille
  root.ls(LS_R | LS_DATE | LS_SIZE);


}


void loop(void) {

}

Mais voila, les données apparaissent bien sur le port série (pourtant je ne voit pas de Serial.print :/), ce que je voudrais c'est récuperer les nom dans des variable de type Char pour pouvoir les proposer sur mon ecran LCD (afin de choisir notre fichier voulu) pour pouvoir ouvrir celui que l'on veut...

deplus mon deuxieme probleme réside dans la lecture d'un fichier de type texte, j'aimerais pouvoir récuperer les valeurs a l'interieurs de celui-ci, (chaque ligne est arreter par un ";")
ex :

58;
42;
25;

etc...

mon besoin serais de rentrer ces valeurs dans une variable (ou dans un tableau mais le principe est le même) malheureusement après de nombreux essai je peine a trouver mon bonheur (oui oui même sur l'immensité du WEB !)

Si je n'ai pas été assez précis faite le moi savoir,

Je vous remercies d'avance de vos réponse
Guillaume

PS : le projet globale un un boitier de commande qui envoie des informations a une machine

bonjour,
normal qu'il n"y ait pas de serial print, c'est une fonction appelée dans la lib sd

sdfile.cpp

void SdFile::ls(uint8_t flags, uint8_t indent) {
  dir_t* p;

  rewind();
  while ((p = readDirCache())) {
    // done if past last used entry
    if (p->name[0] == DIR_NAME_FREE) break;

    // skip deleted entry and entries for . and  ..
    if (p->name[0] == DIR_NAME_DELETED || p->name[0] == '.') continue;

    // only list subdirectories and files
    if (!DIR_IS_FILE_OR_SUBDIR(p)) continue;

    // print any indent spaces
    for (int8_t i = 0; i < indent; i++) Serial.print(' ');

    // print file name with possible blank fill
    printDirName(*p, flags & (LS_DATE | LS_SIZE) ? 14 : 0);

    // print modify date/time if requested
    if (flags & LS_DATE) {
       printFatDate(p->lastWriteDate);
       Serial.print(' ');
       printFatTime(p->lastWriteTime);
    }
    // print size if requested
    if (!DIR_IS_SUBDIR(p) && (flags & LS_SIZE)) {
      Serial.print(' ');
      Serial.print(p->fileSize);
    }
    Serial.println();

    // list subdirectory content if requested
    if ((flags & LS_R) && DIR_IS_SUBDIR(p)) {
      uint16_t index = curPosition()/32 - 1;
      SdFile s;
      if (s.open(this, index, O_READ)) s.ls(flags, indent + 2);
      seekSet(32 * (index + 1));
    }
  }
}

Salut,

Et ce site là par exemple :

Bonsoir,

Merci de vos réponse,

J'ai effectivement trouvé ce site mais il n'explique pas comment récuperer les données de la carte pour les stocker en tant que variable utilisable ?

au niveau de la fonction appelée dans la librairie , il est impossible de rentrer les noms de fichier dans une variable? car en réalité, ecrire sur le port série ne m'interesse pas vraiment, est il possible de récupérer les donnée depuis le port série pour les stocker dans une variable ?

peut etre en reliant RX et TX ??

je ne sait pas si ma question est tres claire mais je ne sais pas trop comment m'y prendre :s

Merci de vos réponse
Guillaume

tu lis les données, les stock dans un tableau simplement.
je n'ai pas approfondi la fonction, mais c'est faisable sans trop de difficulté.

En fait les réponses à tes questions sont toutes dans les programmes d'exemple qui sont installés avec la librairie SD (listfiles.ino, dumpfile.ino,...).