列出連線到Arduino的SD卡中儲存的檔案
正如標題所示,在本教程中,我們將列出連線到Arduino的SD卡中儲存的檔案。
電路圖
電路圖如下所示:

如您所見,您需要進行以下連線:
| SD卡座 | Arduino Uno |
|---|---|
| Vcc | 5V |
| GND | GND |
| MISO | 12 |
| MOSI | 11 |
| SCK | 13 |
| CS | 10 |
僅對於Vcc,請確保您的SD卡座接受5V輸入。如果它接受3.3V輸入,則將其連線到Arduino Uno上的3.3V引腳。
程式碼演練
我們將逐步講解內建SD庫附帶的示例程式碼。您可以從檔案→示例→SD→listfiles訪問它。

或者,程式碼可以在GitHub上找到:https://github.com/adafruit/SD/blob/master/examples/listfiles/listfiles.ino 如您所見,我們首先包含庫並宣告根檔案物件。
#include <SPI.h> #include <SD.h> File root;
在setup中,我們初始化Serial,然後初始化SD。由於我們將SD卡的晶片選擇引腳連線到Arduino Uno的10號引腳,因此我們將在SD.begin()中輸入10作為引數。
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.print("Initializing SD card...");
if (!SD.begin(10)) {
Serial.println("initialization failed!");
while (1);
}
Serial.println("initialization done.");接下來,我們使用SD.open("/");開啟SD卡的根目錄,然後使用printDirectory()函式列出所有檔案。我們稍後會介紹這個函式。
root = SD.open("/");
printDirectory(root, 0);
Serial.println("done!");
}迴圈中沒有執行任何操作。
void loop() {
// nothing happens after setup finishes.
}現在,讓我們來看一下printDirectory()函式。如您所見,這是一個遞迴函式。它接收兩個引數:它必須掃描以查詢檔案的目錄路徑,以及在列印檔案路徑時必須新增到序列監視器的製表符數量。它的虛擬碼將類似於下面給出的虛擬碼:
依次掃描根目錄中的物件
如果當前物件是檔案,則列印其名稱和大小
如果當前物件是目錄,則再次在此目錄上呼叫printDirectory()函式,並增加一個製表符。這樣,巢狀效果將在序列監視器上顯示。
當前目錄中沒有更多物件時,退出。
void printDirectory(File dir, int numTabs) {
while (true) {
File entry = dir.openNextFile();
if (! entry) {
// no more files
break;
}
for (uint8_t i = 0; i < numTabs; i++) {
Serial.print('\t');
}
Serial.print(entry.name());
if (entry.isDirectory()) {
Serial.println("/");
printDirectory(entry, numTabs + 1);
} else {
// files have sizes, directories do not
Serial.print("\t\t");
Serial.println(entry.size(), DEC);
}
entry.close();
}
}
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP