文件名从Arduino SD卡模块到Array

问题描述 投票:0回答:1

我正在尝试使用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
c++ arrays arduino sd-card
1个回答
2
投票

你在这行代码中遇到两个问题:

songList =(String*) malloc(nSongs);

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

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

songList = new String[nSongs];
© www.soinside.com 2019 - 2024. All rights reserved.