2010-12-27 2 views
1

私はプログラムをSDカードのルートではなく特定のフォルダに見えるようにする方法を理解できません。私はファイルのパスを変更しようとしましたが、それはファイルを見つけることができないということだけです。Arduino WaveHCライブラリ:SDカードのルートにあるフォルダをプログラムで参照するにはどうすればいいですか?

ここでは、コードです:

#include <FatReader.h> 
#include <SdReader.h> 
#include <avr/pgmspace.h> 
#include "WaveUtil.h" 
#include "WaveHC.h" 

SdReader card; // This object holds the information for the card 
FatVolume vol; // This holds the information for the partition on the card 
FatReader root; // This holds the information for the filesystem on the card 
FatReader f;  // This holds the information for the file we're play 

WaveHC wave; // This is the only wave (audio) object, since we will only play one at a time 

#define DEBOUNCE 100 // button debouncer 

// This handy function will return the number of bytes currently free in RAM, great for debugging! 
int freeRam(void) 
{ 
    extern int __bss_end; 
    extern int *__brkval; 
    int free_memory; 
    if ((int)__brkval == 0) { 
     free_memory = ((int)&free_memory) - ((int)&__bss_end); 
} 
else { 
    free_memory = ((int)&free_memory) - ((int)__brkval); 
} 
    return free_memory; 
} 

void sdErrorCheck(void) 
{ 
    if (!card.errorCode()) 
     return; 
    putstring("\n\rSD I/O error: "); 
    Serial.print(card.errorCode(), HEX); 
    putstring(", "); 
    Serial.println(card.errorData(), HEX); 
    while(1); 
} 

void setup() { 
    // Set up serial port 
    Serial.begin(9600); 
    putstring_nl("WaveHC with 6 buttons"); 

    putstring("Free RAM: "); // This can help with debugging, running out of RAM is bad 
    Serial.println(freeRam()); // if this is under 150 bytes it may spell trouble! 

    // Set the output pins for the DAC control. This pins are defined in the library 
    pinMode(2, OUTPUT); 
    pinMode(3, OUTPUT); 
    pinMode(4, OUTPUT); 
    pinMode(5, OUTPUT); 

    // pin13 LED 
    pinMode(13, OUTPUT); 

    // Enable pull-up resistors on switch pins (analog inputs) 
    digitalWrite(14, HIGH); 
    digitalWrite(15, HIGH); 
    digitalWrite(16, HIGH); 
    digitalWrite(17, HIGH); 
    digitalWrite(18, HIGH); 
    digitalWrite(19, HIGH); 

    // if (!card.init(true)) { //play with 4 MHz SPI if 8MHz isn't working for you 
    if (!card.init()) { //play with 8 MHz SPI (default faster!) 
     putstring_nl("Card init. failed!"); // Something went wrong, lets print out why 
     sdErrorCheck(); 
     while(1);  // then 'halt' - do nothing! 
    } 

    // enable optimize read - some cards may timeout. Disable if you're having problems 
    card.partialBlockRead(true); 

    // Now we will look for a FAT partition! 
    uint8_t part; 
    for (part = 0; part < 5; part++) { // We have up to 5 slots to look in 
     if (vol.init(card, part)) 
      break;   // We found one, let's bail 
    } 
    if (part == 5) { // if we ended up not finding one :(
     putstring_nl("No valid FAT partition!"); 
     sdErrorCheck(); // Something went wrong, lets print out why 
     while(1);  // then 'halt' - do nothing! 
    } 

    // Let's tell the user about what we found 
    putstring("Using partition "); 
    Serial.print(part, DEC); 
    putstring(", type is FAT"); 
    Serial.println(vol.fatType(),DEC);  // FAT16 or FAT32? 

    // Try to open the root directory 
    if (!root.openRoot(vol)) { 
     putstring_nl("Can't open root dir!"); // Something went wrong, 
     while(1);   // then 'halt' - do nothing! 
    } 

    // Whew! We got past the tough parts. 
    putstring_nl("Ready!"); 
} 

void loop() { 
    //putstring("."); // Uncomment this to see if the loop isnt running 
    switch (check_switches()) { 
     case 1: 
      playcomplete("1.WAV"); 
      break; 
     case 2: 
      playcomplete("2.WAV"); 
      break; 
     case 3: 
      playcomplete("3.WAV"); 
      break; 
     case 4: 
      playcomplete("4.WAV"); 
      break; 
     case 5: 
      playcomplete("5.WAV"); 
      break; 
     case 6: 
      playcomplete("6.WAV"); 
    } 
} 

byte check_switches() 
{ 
    static byte previous[6]; 
    static long time[6]; 
    byte reading; 
    byte pressed; 
    byte index; 
    pressed = 0; 

    for (byte index = 0; index < 6; ++index) { 
     reading = digitalRead(14 + index); 
     if (reading == LOW && previous[index] == HIGH && millis() - time[index] > DEBOUNCE) 
     { 
      // switch pressed 
      time[index] = millis(); 
      pressed = index + 1; 
      break; 
     } 
     previous[index] = reading; 
    } 
    // return switch number (1 - 6) 
    return (pressed); 
} 

// Plays a full file from beginning to end with no pause. 
void playcomplete(char *name) { 
    // call our helper to find and play this name 
    playfile(name); 
    while (wave.isplaying) { 
     // Do nothing while its playing 
    } 
    // Now it's done playing 
} 

void playfile(char *name) { 
    // see if the wave object is currently doing something 
    if (wave.isplaying) { // Already playing something, so stop it! 
      wave.stop(); // Stop it 
    } 
    // Look in the root directory and open the file 
    if (!f.open(root, name)) { 
     putstring("Couldn't open file "); Serial.print(name); return; 
    } 
    // OK read the file and turn it into a wave object 
    if (!wave.create(f)) { 
     putstring_nl("Not a valid WAV"); return; 
    } 

    // OK time to play! Start playback 
    wave.play(); 
} 

答えて

0

まあ、私は図書館を持っていますが、あなたが最初のディレクトリを開く必要がありますドキュメントを見ていませんが。 ルート・ボリュームを取得した後、あなたはライブラリを解凍したときにすぐに

// Try to open the root directory 
    if (!root.openRoot(vol)) { 
    putstring_nl("Can't open root dir!"); // Something went wrong, 
    while(1);   // then 'halt' - do nothing! 
    } 

後、おそらく

root.open(root, "mydir"); 

ような何かを、それはFATライブラリのクラスのためのいくつかのHTMLドキュメントが付属しています。私の提案がうまくいかない場合は、マニュアルを参照してください。

関連する問題