#include <SD.h>
#define CS_PIN 10 // SD卡模块的片选引脚定义 / CS-Pin für SD-Kartenmodul
File root; // 根目录文件对象 / Root-Verzeichnis-Dateiobjekt
void setup() {
Serial.begin(115200); // 初始化串口通信 / Serielle Kommunikation initialisieren
// 初始化SD卡 / SD-Karte initialisieren
Serial.print("Initializing SD card... "); // 正在初始化SD卡... / Initialisiere SD-Karte...
if (!SD.begin(CS_PIN)) {
Serial.println("Card initialization failed!"); // 卡初始化失败! / Karteninitialisierung fehlgeschlagen!
while (true); // 初始化失败则停机 / Beenden bei Fehler
}
Serial.println("Initialization done."); // 初始化完成 / Initialisierung abgeschlossen
// 打印根目录文件列表 / Dateiliste im Root-Verzeichnis ausgeben
Serial.println("Files in the card:"); // 卡中的文件: / Dateien auf der Karte:
root = SD.open("/");
printDirectory(root, 0);
Serial.println("");
// 示例:读取文件内容 / Beispiel: Dateiinhalt lesen
File textFile = SD.open("wokwi.txt");
if (textFile) {
Serial.print("wokwi.txt: "); // wokwi.txt内容: / Inhalt von wokwi.txt:
while (textFile.available()) {
Serial.write(textFile.read()); // 逐字符输出 / Zeichenweise ausgeben
}
textFile.close(); // 关闭文件 / Datei schließen
} else {
Serial.println("Error opening wokwi.txt!"); // 打开wokwi.txt错误! / Fehler beim Öffnen von wokwi.txt!
}
}
void loop() {
// 初始化后无需操作 / Keine Operationen nach Initialisierung notwendig
}
// 递归打印目录内容 / Rekursive Funktion zum Verzeichnisinhalt ausgeben
void printDirectory(File dir, int numTabs) {
while (true) {
File entry = dir.openNextFile(); // 打开下一个文件项 / Nächsten Dateieintrag öffnen
if (!entry) {
// 没有更多文件了 / Keine weiteren Dateien vorhanden
break;
}
// 打印缩进(用于子目录) / Einrückung für Unterverzeichnisse
for (uint8_t i = 0; i < numTabs; i++) {
Serial.print('\t');
}
Serial.print(entry.name()); // 打印文件名 / Dateinamen ausgeben
if (entry.isDirectory()) {
// 如果是目录 / Wenn Verzeichnis
Serial.println("/");
printDirectory(entry, numTabs + 1); // 递归处理子目录 / Rekursiver Aufruf für Unterverzeichnis
} else {
// 如果是文件,打印大小 / Wenn Datei, Größe ausgeben
Serial.print("\t\t"); // 两个制表符分隔 / Zwei Tabulatoren als Trennung
Serial.println(entry.size(), DEC); // 十进制显示文件大小 / Dateigröße in Dezimal ausgeben
}
entry.close(); // 关闭当前文件项 / Aktuellen Dateieintrag schließen
}
dir.close(); // 关闭目录 / Verzeichnis schließen
}