从 Arduino SD 卡模块到 Array 的文件名

File names from Arduino SD card module to Array

我正在尝试使用 arduino 和 SD 卡模块制作一个简单的 wav 播放器,我才刚刚开始就已经遇到了一些问题。 我需要从 SD 卡内的特定文件夹中获取所有文件名并将它们保存到一个数组中。我的第一个问题是,我需要一个可以在 运行 时间内改变大小的数组。经过一点研究后,我在代码上找到了这个解决方案,这是最好的方法吗? 其次,每当我 运行 代码时,我都会得到不同的输出,有时会出现一些歌曲名称,有时则不会。他们永远不会正确显示每首歌曲的名称。 第三,出现歌名时,是不完整的

我的文件夹结构是:

MUSIC/
    HakunaMatata1.wav
    HakunaMatata2.wav
    HakunaMatata3.wav
    HakunaMatata4.wav
    HakunaMatata5.wav
    HakunaMatata6.wav
    HakunaMatata7.wav
    HakunaMatata8.wav

我的串口输出如下:

Program started
SD initialization done.
Songs found:8
Songs List:
HAKUNA~1.WAV

HA1170~1.WAV
HA899A~1.WAV

最后,我的代码:

#include <SPI.h>
#include <SD.h>

#define path "/music"
#define CSPin 53

String *songList;
File dir;
int nSongs = 0;


void setup() {
  Serial.begin(9600);
  while(!Serial){
  }

  Serial.println("Program started");
  if (!SD.begin(CSPin)) {
    Serial.println("SD initialization failed!");
    while (1);
  }
  Serial.println("SD initialization done.");

  dir = SD.open(path);
  listSongs(dir);
}

void loop() {
  // put your main code here, to run repeatedly:

}



void listSongs(File folder){
  nSongs = 0;

  while(true){
    File entry = folder.openNextFile();
    if(!entry){
      folder.rewindDirectory();
      break;
    }else{
    nSongs++;
    }   
    entry.close();
  }

  Serial.print("Songs found:");
  Serial.println(nSongs);

  songList =(String*) malloc(nSongs);

  Serial.println("Songs List:");

  for(int i = 0; i < nSongs; i++){
    File entry = folder.openNextFile();
    songList[i] = entry.name();
    entry.close();
    Serial.println(songList[i]);
  }
}

接线可能是正确的,因为 SD 卡正确初始​​化,但是,这里是:

SD CARD MODULE     ARDUINO MEGA
GND                GND
MISO               50
SCK                52
MOSI               51
CS                 53
5V                 5V

这行代码有两个问题:

songList =(String*) malloc(nSongs);

首先,您没有分配足够的内存,其次,您最终会得到未初始化的 Strings。

由于这是 C++,解决此问题的最简单方法是使用 new 而不是 malloc

songList = new String[nSongs];