#include <SdFat.h>
SdFat SD;
File rawFile;
char filename[] = "/main/000.raw";
const int LED_ACT = 7; // Pin per il led di lettura Raw
const int LED_BOOT = 6; // Pin per il led di corretto avvio SD
const int RSTBTN = 5; // Pin per il pulsante di reset
int booted; // Variabile per non ripetere la sequenza boot
float p = 3.1415926;
#define RBUFF_SIZE 256 // Buffer per il render dei raw, sopra i 384 va in blocco
#define SD_FAT_TYPE 1 // Scheda SD in FAT16/32
#define SPI_CLOCK SD_SCK_MHZ(50) // Imposta Lettore SD alla massima velocità
#define USE_FAT_FILE_FLAG_CONTIGUOUS 1 // Ottimizza se file scritti contigui
// Imposta la scheda SD per le prestazioni migliori
#if HAS_SDIO_CLASS
#define SD_CONFIG SdioConfig(FIFO_SDIO)
#elif ENABLE_DEDICATED_SPI
#define SD_CONFIG SdSpiConfig(SD_CS_PIN, DEDICATED_SPI, SPI_CLOCK)
#else // HAS_SDIO_CLASS
#define SD_CONFIG SdSpiConfig(SD_CS_PIN, SHARED_SPI, SPI_CLOCK)
#endif // HAS_SDIO_CLASS
#define NUM_FILES 20
// Convert an integer without itoa() (no leading zero) or sprintf functions
const decimalToString(uint8_t* str, uint8_t len, uint16_t val) {
uint8_t i;
for(i=1; i<=len; i++) {
str[len-i] = (uint8_t) ((val % 10UL) + '0');
val/=10;
}
// str[i-1] = '\0'; // Non è necessario il terminatore in questo caso
}
void createFiles(const char* dir) {
// Create a new folder.
if (!SD.mkdir(dir)) {
Serial.println("Create dir failed");
}
for (int num = 0; num < NUM_FILES; num++) {
char filestr[3];
// Convert decimal to string with leading zero
decimalToString(filestr, 3, num);
// replace folder string
strncpy(filename, dir, strlen(dir));
// replace numeric substring in filepath[]
strncpy(filename + strlen(dir), filestr, 3);
Serial.print("Create file ");
Serial.print(filename);
File file = SD.open(filename, FILE_WRITE);
if (!file) {
Serial.println(", error. File not created");
return;
}
Serial.println(", OK");
file.close();
}
}
void checkFiles(const char* dir) {
// Check if file was created succesfully
for (int num = 0; num < NUM_FILES; num++) {
char filestr[3];
decimalToString(filestr, 3, num);
strncpy(filename, dir, strlen(dir));
strncpy(filename + strlen(dir), filestr, 3);
File file = SD.open(filename, FILE_READ);
if (!file) {
Serial.print(filename);
Serial.println(" not found");
return;
}
Serial.print("Read file ");
Serial.print(dir);
file.printName(&Serial);
Serial.println();
file.close();
}
}
void setup()
{
Serial.begin(115200);
Serial.print("Inizializzo SD...");
if (!SD.begin(10)) {
Serial.println("Inizializzazione fallita!");
while (1);
}
Serial.println("Inizializzazione OK");
createFiles("/boot/");
Serial.println("\n");
checkFiles("/boot/");
Serial.println("\n");
createFiles("/main/");
Serial.println("\n");
checkFiles("/main/");
Serial.println("\n");
}
void loop()
{
}