【问题标题】:File names from Arduino SD card module to Array从 Arduino SD 卡模块到 Array 的文件名
【发布时间】:2023-03-16 21:29:02
【问题描述】:

我正在尝试使用 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

【问题讨论】:

  • @kiranBiradar String 相当于 Arduino 标准的 std::string

标签: c++ arrays arduino sd-card


【解决方案1】:

这行代码有两个问题:

songList =(String*) malloc(nSongs);

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

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

songList = new String[nSongs];

【讨论】:

    猜你喜欢
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多