列出连接到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