#include "SdFat.h"
#define SPI_SPEED SD_SCK_MHZ(4)
#define CS_PIN 10
SdFat sd;
File dir;
File file;
String getFileName(byte i) {
/*
Returns a filename.
if i = 1 it returns the first file
if i = 2 it returns the second file name
if i = 3 ... see what I did here?
*/
int fileCount = 0;
String result = "";
char buf[32];
// Open root directory
if (!dir.open("/")) {
// error("dir.open failed");
}
while (file.openNext(&dir, O_READ)) {
if (!file.isHidden()) {
fileCount++;
if(fileCount == i){
file.getName(buf, sizeof(buf));
result = String(buf);
}
}
file.close();
}
dir.close();
if (dir.getError()) {
Serial.println("openNext failed");
} else {
Serial.println("Done!");
}
return result;
}
String getBlockName(String filename) {
uint8_t index = filename.indexOf(".");
return filename.substring(0, index);
}
String getBlockNameById(byte i) {
String name = getFileName(i);
return getBlockName(name);
}
byte filecount() {
/*
Count the number of files on the SD card.
*/
// Open root directory
if (!dir.open("/")) {
// error("dir.open failed");
}
int fileCount = 0;
while (file.openNext(&dir, O_READ)) {
if (!file.isHidden()) {
fileCount++;
}
file.close();
}
dir.close();
return fileCount;
}
void setup() {
Serial.begin(115200);
if (!sd.begin(CS_PIN, SPI_SPEED)) {
// if (sd.card()->errorCode()) {
// Serial.println("SD initialization failed.");
// } else if (sd.vol()->fatType() == 0) {
// Serial.println("Can't find a valid FAT16/FAT32 partition.");
// } else {
// Serial.println("Can't determine error type");
// }
return;
}
Serial.println("Files on card:");
Serial.println(" Size Name");
sd.ls(LS_R | LS_SIZE);
Serial.println(filecount());
// Serial.println(getFileName(0));
Serial.println(getFileName(1));
Serial.println(getFileName(2));
Serial.println(getFileName(3));
Serial.println(getFileName(4));
}
void loop() {
}