Я пытаюсь сделать простой WAV-плеер, используя Arduino и модуль SD-карты, я только начал и уже столкнулся с некоторыми проблемами.
Мне нужно получить все имена файлов из определенной папки на 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