2

我正在尝试编写一个程序,该程序允许使用触摸屏上的按钮遍历 SD 卡的内容(假设只有一层文件;也就是没有文件夹)。但是,我发现无法获得 SD 卡上所有文件的“列表”:

  • 我不能只创建一个数组stringsorchar*因为我不知道卡上的文件数。此外,如果可能的话,我希望容器是动态的。

  • 我无法创建向量,因为 Arduino 无法识别std::vectorvector甚至当我有C++ for Arduino时。

  • 搜索 google 产品new在 Arduino 的 C++ 中不存在

我可以使用malloc(或new),但这将涉及我创建自己的容器类。尽管这可能很有趣,但我所做的目标不是实现动态容器类。

在寻找这样的功能时,我是否错过了一些重要的事情?

4

1 回答 1

1

我建议您查看我的示例MP3 File PlayerWeb Player

有两个问题:

1)您需要从欣赏 Arduino 没有足够资源 (SRAM) 来保存整个 SdFAT 目录列表的角度来解决这个问题。因此,我的方法是使用用户控制台来保留列表。它将目录内容连同相应的编号转储到控制台。用户可以从中选择他们希望输入的号码。类似地,Web Player做同样的事情,但是在生成 HTML 时,它会生成一个指向相应列出项目的链接。因此,该列表存储在控制台上,即浏览器或串行监视器。

2) 默认提供的 SD 库不足以满足您的需求。最近 Arduino 将Bill Greiman 的 SdFatLib 合并为引擎盖下的类。但是限制了。在使用 Bill 的原生 SdFat 库时,您可以使用其他方法来访问单个对象,例如getFilename()SD 中不可用的方法。在浏览目录时这是必需的。sd.ls(LS_DATE | LS_SIZE)只会直接转储到串行。您需要在哪里使用访问各个文件本身。如下图或实际代码

SdFile file;
char filename[13];
sd.chdir("/",true);
uint16_t count = 1;
while (file.openNext(sd.vwd(),O_READ))
{
  file.getFilename(filename);
  Serial.print(count);
  Serial.print(F(": "));
  Serial.println(filename);
  count++;
}
file.close();

此外, WebPlayer 的 ListFiles()函数中还可以通过引用访问隐藏的公共方法,以便对文件进行更离散的处理。

于 2013-05-13T14:46:06.910 回答