2013-05-12 3 views
2

터치 스크린의 버튼을 사용하여 SD 카드의 내용을 탐색하는 데 사용할 수있는 프로그램을 작성하려고합니다 (한 수준의 파일 만 있다고 가정합니다.). 내가 수 을 모르기 때문에 그냥 strings 또는 char*의 배열을 만들 수 없습니다Arduino에서 SD 카드 디렉토리의 사용자 제어 순회

  • : 그러나, 나는이 불가능 SD 카드에있는 모든 파일의 "목록"을 얻기 위해 찾는입니다 카드에있는 파일 중 게다가 이 가능하면 컨테이너가 동적이되기를 바랍니다. 내가 Arduino에 대한 C++이 경우에도 아두 이노가 std::vector 또는 vector을 인식하지 못하기 때문에

  • 나는 벡터를 만들 수 없습니다.

  • 검색 구글은 new 내가 malloc (또는 new)를 사용할 수 아두 이노의 C++

에 존재하지 않는 생산,하지만 그건 내 자신의 컨테이너 클래스를 만드는 포함한다. 흥미로울 수 있듯이, 내가하고있는 일의 목표는 동적 컨테이너 클래스를 구현하는 것이 아닙니다.

그런 기능에 대한 내 검색에서 중요한 것을 놓친 적이 있습니까?

+0

본 적이 있습니까? [기본 라이브러리를 사용하여 SD 디렉토리 내용을 나열 하시겠습니까?] (http://forum.arduino.cc/index.php?topic=55851.0). –

+0

@SamRad 예. 불행히도, 나는 그 코드를 사용하여 SD 카드로 작동하도록 할 수 없습니다. 다른 SD 예제와 함께 작동하도록 SD 카드를 받았음에도 불구하고'if (! card.init (SPI_HALF_SPEED, chipSelect))'에서 실패를 계속합니다 – calccrypto

+0

어떤 오류가 발생합니까? 그들은 실패 할 경우'if (! card.init (SPI_QUARTER_SPEED, chipSelect))'를 사용할 것을 제안합니다. See [SD.begin()은 false를 반환합니다] (http://forum.arduino.cc/index.php?topic=140770.5; wap2) –

답변

1

내보기는 MP3 File Player이고 Web Player입니다. 당신은 전체 SdFAT의 디렉토리의 목록을 유지하기 위해 충분한 자원 (SRAM)를이없는 아두 이노를 감상 관점에서이 문제를 접근 할 필요가

1) :

는 두 가지 문제가 있습니다. 따라서 나의 접근 방식은 목록을 유지하기 위해 사용자 콘솔을 사용하는 것이 었습니다. 디렉토리 내용을 해당 번호와 함께 콘솔에 덤프합니다. 사용자가 입력 할 번호를 선택할 수 있습니다. 마찬가지로 Web Player도 똑같은 작업을 수행하지만 HTML을 생성 할 때 해당 목록 항목을 가리키는 링크가 생성됩니다. 따라서 목록은 브라우저 또는 직렬 모니터 중 하나 인 콘솔에 저장됩니다.

2) 기본적으로 제공되는 SD 라이브러리로는 원하는 작업을 수행 할 수 없습니다. 최근 Arduino는 두건 종류로 Bill Greiman’s SdFatLib를 통합했다. 그러나 그것을 제한했다. Bill의 네이티브 SdFat 라이브러리를 사용하면 SD에서 사용할 수없는 getFilename()과 같은 개별 객체에 액세스하는 추가 메서드를 사용할 수 있습니다. 이것은 디렉토리를 이동할 때 필요합니다. sd.ls(LS_DATE | LS_SIZE)은 직렬로 직접 덤프됩니다. 개별 파일 자체에 액세스해야하는 경우. WebPlayer’s ListFiles() 기능의 쇼 같은 참조 액세스 쇼 아래로 또는 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(); 

또한이 묻혀있는 공공 방법은 파일의 더 분리 처리를 얻을 수 있습니다.