2013-05-12 201 views
2

我想写一个程序,允许用户通过触摸屏上的按钮遍历SD卡的内容(假设只有一个级别的文件;也没有文件夹)。然而,我发现它不可能得到一个SD卡上的所有文件的“清单”:用户控制的Arduino上的SD卡目录遍历

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

  • 我不能创建一个矢量,因为Arduino的不承认std::vectorvector即使我有C++Arduino

  • 谷歌搜索产生new不Arduino的的C++

存在我可以使用malloc(或new),但是这将涉及我创造我自己的容器类。虽然这很有趣,但我所做的目标不是实现一个动态容器类。

我在搜索这样的功能时错过了一些主要的东西吗?

+0

你见过? [使用本地库列出SD目录内容?](http://forum.arduino.cc/index.php?topic=55851.0)。 – 2013-05-12 21:18:46

+0

@SamRad是的。不幸的是,我无法得到该代码为我使用的SD卡工作。即使我已经获得SD卡与其他SD示例一起工作,它仍然会在'if(!card.init(SPI_HALF_SPEED,chipSelect))'上失败 – calccrypto 2013-05-13 01:58:54

+0

您会得到什么错误?如果失败,他们建议使用if(!card.init(SPI_QUARTER_SPEED,chipSelect))。参见[SD.begin()返回false](http://forum.arduino.cc/index.php?topic=140770。5; wap2) – 2013-05-13 07:41:06

回答

1

我建议你看看我的例子MP3 File PlayerWeb Player

这里有两个问题:

1)您需要但从欣赏的Arduino没有足够的资源(SRAM)持有整个SdFAT的目录列表点接近这一点。因此,我的方法是使用用户控制台保留列表。它将目录内容与相应的数字一起转储到控制台。用户可以从中选择他们希望输入的号码。同样的,Web Player也做同样的事情,但是当生成HTML时,它会生成指向相应列表项的链接。因此,该列表存储在作为浏览器或串行监视器的控制台上。

2)默认提供的SD库不足以做你想做的。最近Arduino将Bill Greiman’s SdFatLib纳入引擎盖类。但限制它。在使用Bill本地SdFat库的地方,您可以使用其他方法来访问单个对象,如getFilename(),在SD中不可用。通过目录时这是必需的。 sd.ls(LS_DATE | LS_SIZE)只会直接转储到串行。你需要在哪里访问个人文件。正如下面显示或in actual code

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’s ListFiles()功能显示引用访问,以获得文件的多个离散的处理。