#include <SD.h>
String getDirectoryForSong(uint16_t song) {
// Datei "index.txt" öffnen
File indexFile = SD.open("/index.txt");
if (!indexFile) {
Serial.println("Fehler beim Öffnen der Datei index.txt!");
return "";
}
// Zeilenzähler initialisieren
uint32_t lineCount = 0;
// Zähler für die Anzahl der Songs in einem Verzeichnis
uint16_t songCount = 0;
// Schleife durch jede Zeile in der Datei
while (indexFile.available()) {
String line = indexFile.readString();
Serial.println(line);
// Verzeichnis und Anzahl der Songs in der Zeile parsen
String directory = line.substring(0, line.indexOf('/'));
Serial.println("dir:" + directory);
uint16_t numSongs = line.length() - line.indexOf('/') - 1;
Serial.println("numSongs: "+ String(numSongs));
// Songzähler erhöhen
songCount += numSongs;
// Wenn die Anzahl der Songs die gewünschte Songnummer erreicht hat,
// ist dies das richtige Verzeichnis
if (songCount >= song) {
// Datei schließen und Verzeichnis zurückgeben
indexFile.close();
return directory;
}
// Zeilenzähler erhöhen
lineCount++;
}
// Datei schließen und leeren String zurückgeben, wenn kein Verzeichnis gefunden wurde
indexFile.close();
return "";
}
// Beispiel für die Verwendung der Funktion
void setup() {
Serial.begin(115200);
// SD-Karte initialisieren
if (!SD.begin()) {
Serial.println("Fehler beim Initialisieren der SD-Karte!");
while (1);
}
// Songnummer
uint16_t song = 110;
// Verzeichnis ermitteln
String directory = getDirectoryForSong(song);
// Ausgabe des Verzeichnisses
Serial.print("Verzeichnis für Song ");
Serial.print(song);
Serial.print(": ");
Serial.println(directory);
}
void loop() {
}