Arduino SD卡选择删除

时间:2013-06-06 07:33:57

标签: arduino sd-card arduino-ide

我正在尝试制作一种菜单,允许用户从SD card删除文件或多个文件。

我可以很容易地获得所有文件的完整列表,但是当涉及到运行并询问用户是否每个文件都被删除时,我不知何故只获得前七个文件然后重复第七个文件直到达到最大文件数。

这是我的代码:

#include <SD.h>

File datafile;

void setup()
{
    // Open serial communications and wait for port to open:
    Serial.begin(9600);
    Serial.print("Initializing SD card...");
    pinMode(10, OUTPUT);

    if (!SD.begin(10)) {
        Serial.println("initialization failed!");
        return;
    }
    Serial.println("initialization done.");
    Serial.println("done!");
}

void loop()
{
    while (true)
    {
        char c;  // A choice var this will be changed later to a button so for now this method works
        datafile = SD.open("/");
        printDirectory(datafile);  // Function to print the full list of files in one go
        Serial.println("Do you want to delete a file? (y = 1 / n = 2)");

        while(!Serial.available()) // Wait until the user inputs something.
        {}
        c = Serial.read();
        if (c=='2')
            hold();                // If no, go to hold function ( basically end program )
        else
            if (c=='1')            // If yes, go to the delete function
            {
                datafile = SD.open("/");  // Give the data link to the SD card
                deletnum(datafile);
            }
            else
                Serial.println("Choice not correct try again");  // If choice is wrong, I'm not too concerned about this now.
    }
}

void deletnum(File dir)
{
    Serial.println("Scrolling numbers now");  // Scroll though the numbers and pick what to delete

    int c=0;
    File entry;
    int x=1;
    while(true)
    {
        entry =  dir.openNextFile();
        // if (! entry)
        // { // no more files
        //   break;}
        Serial.print("This one ? 1=yes , 2= no : ");
        Serial.println(entry.name());
        while(!Serial.available())
        {;}

        c = Serial.read();
        if(c=='1')                             // If they picked yes then delete it and go to the next file and ask.
        {
            SD.remove(entry.name());
            Serial.println(" file deleted")
        }
        else
            if (c=='2')
                Serial.println("not that one then");
    }
}

void printDirectory(File dir)   // Function to print the full list of files in one go
{
    int x=1;
    while(true)
    {
        File entry =  dir.openNextFile();
        if (! entry)
        { // No more files
            break;
        }
        Serial.print(x);
        Serial.print(") ");
        Serial.println(entry.name());
        x++;
    }
}

void hold() // A function just to "hold" or stop the program if he user does not want to delete any more files.
{
    while(true)
    {
      Serial.println("Holding");  // here just to show me that it is in the loop
    }
}

但毕竟我得到了这个输出:

Initializing SD card...initialization done.

done!

1) TEMPDATA.TXT

2) DTAD.TXT

3) 84.TX

4) 104.TX

5) TEMPDA00.TXT

6) TEMPDA02.TXT

7) TEMPDA03.TXT

8) TEMPDA04.TXT

9) TEMPDA05.TXT

Do you want to delete a file ? (y = 1 / n = 2)

Scrolling numbers now

This one ? 1=yes , 2= no : TEMPDATA.TXT

not that one then

This one ? 1=yes , 2= no : DTAD.TXT

not that one then

This one ? 1=yes , 2= no : 84.TX

not that one then

This one ? 1=yes , 2= no : 104.TX

not that one then

This one ? 1=yes , 2= no : TEMPDA00.TXT

not that one then

This one ? 1=yes , 2= no : TEMPDA02.TXT

not that one then

This one ? 1=yes , 2= no : TEMPDA03.TXT

not that one then

This one ? 1=yes , 2= no : TEMPDA04.TXT

not that one then

This one ? 1=yes , 2= no : TEMPDA04.TXT      // Here lies the problem. This should be TEMPDA05.TXT.

not that one then

This one ? 1=yes , 2= no :     // There are not more files so there are no more names.

如果我还有更多文件,会发生这种情况,但它总是在7时停止然后重复。为什么呢?

1 个答案:

答案 0 :(得分:0)

我觉得你需要一行检查每个条目以查看它是否是一个目录:

if (entry.isDirectory())
{
    Serial.println("Test")
}

我的猜测是你获取目录名的方式存在问题。