Je cherche à lister les fichiers d'une carte SD pour les intégrer ensuite dans un tableau de fichiers.
J'utilise cet exemple, mais tous les fichiers ne sont pas listés.
Je voudrais que la liste des fichiers *.IDL fasse apparaitre les fichiers dans la console série l'un après l'autre séparés par une virgule et sans le suffixe.
Par exemple:
List Motors:DSL-LTL, DSL-BIG
J'obtiens ça:
Program started
SD initialization done.
Songs found:27
Songs List:
SYSTEM~1
DSL-LTL.IDL
DSL-LTL.STA
Le code actuel rencontre quelques problèmes pour générer une liste correcte des fichiers .IDL de votre carte SD, probablement en raison de l'utilisation incorrecte de malloc et de la façon dont vous lisez les fichiers. Voici une version améliorée qui devrait résoudre ces problèmes :
Filtrez les fichiers pour n'inclure que ceux ayant l'extension .IDL. Supprimez le suffixe .IDL pour chaque nom de fichier avant de l'ajouter à la liste. Stockez les noms de fichiers dans un tableau dynamique, en les séparant par des virgules pour l'affichage.
Voici le code corrigé
#include <SPI.h>
#include <SD.h>
#define CSPin 10
String *songList;
File dir;
int nSongs = 0;
void setup() {
Serial.begin(115200);
while (!Serial) { delay(0); }
Serial.println("Program started");
if (!SD.begin(CSPin)) {
Serial.println("SD initialization failed!");
return;
}
Serial.println("SD initialization done.");
dir = SD.open("/");
listSongs(dir);
}
void loop() {
// Empty loop
}
void listSongs(File folder) {
nSongs = 0;
// Compter le nombre de fichiers `.IDL`
while (true) {
File entry = folder.openNextFile();
if (!entry) {
folder.rewindDirectory();
break;
}
if (String(entry.name()).endsWith(".IDL")) {
nSongs++;
}
entry.close();
}
Serial.print("Songs found: ");
Serial.println(nSongs);
// Allouer de la mémoire pour stocker les noms des chansons
songList = new String[nSongs];
int songIndex = 0;
// Lire les fichiers et les stocker dans `songList`
while (true) {
File entry = folder.openNextFile();
if (!entry) {
folder.rewindDirectory();
break;
}
String fileName = entry.name();
if (fileName.endsWith(".IDL")) {
// Retirer le suffixe ".IDL"
fileName = fileName.substring(0, fileName.length() - 4);
songList[songIndex++] = fileName;
}
entry.close();
}
// Afficher la liste des fichiers dans la console série
Serial.print("List Motors: ");
for (int i = 0; i < nSongs; i++) {
Serial.print(songList[i]);
if (i < nSongs - 1) {
Serial.print(", ");
}
}
Serial.println();
// Libérer la mémoire allouée
delete[] songList;
}
Je n'ai jamais encore utilisé chatGPT pour trouver une solution de code.
Un ami l'a fait afin de tenter de trouver comment le CRC d'un récepteur Graupner SPCM est calculé.
chatGPT n'avait pas donné de résultat faute d'un DUMP du récepteur trop court !
Mais je pense bien y revenir