0

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

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

这是我的代码:

#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.

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

4

1 回答 1

0

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

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

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

于 2013-06-06T13:56:26.233 回答