2013-05-12 65 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()功能顯示引用訪問,以獲得文件的多個離散的處理。