gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 01:29:12 25 4
gpt4 key购买 nike

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

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

因为这是 C++,解决这个问题的最简单方法是使用 new 而不是 malloc:

songList = new String[nSongs];

关于c++ - 从 Arduino SD 卡模块到 Array 的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52353797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com