#include <SD.h>
#define SD_CS_PIN 10 // Pin CS per la scheda SD
#define CELL_WIDTH 6 // Larghezza fissa di ogni cella (compreso il padding e il ;)
#define NUM_COLS 10 // Numero fisso di colonne nella tabella
#define NUM_ROWS 6 // Numero fisso di righe nella tabella
// Lunghezza totale della riga compreso terminatore (in questo caso c'è solo il '\n')
const uint8_t lineLength = (CELL_WIDTH * NUM_COLS) + 1;
// Funzione per leggere il valore da riga e colonna specificate
int readValueFromTable(const char *fileName, int row, int col) {
File file = SD.open(fileName, FILE_READ);
if (!file) {
Serial.println("Errore: impossibile aprire il file");
return -0xFF; // Errore
}
// Calcola la posizione nel file della cella desiderata
uint32_t position = (row * lineLength) + (col * CELL_WIDTH);
// Sposta il cursore alla posizione calcolata
file.seek(position);
// Leggi il valore della cella
char buffer[CELL_WIDTH + 1]; // Buffer per contenere la cella + null terminator
file.readBytes(buffer, CELL_WIDTH);
buffer[CELL_WIDTH] = '\0'; // Aggiungi il terminatore di stringa
file.close();
return atoi(buffer); // Converte il valore in intero e lo restituisce
}
void setup() {
Serial.begin(115200);
// Inizializza la scheda SD
if (!SD.begin(SD_CS_PIN)) {
Serial.println("Errore: scheda SD non inizializzata");
return;
}
for (int r = 0; r < NUM_ROWS; r++) {
for (int c = 0; c < NUM_COLS; c++) {
int value = readValueFromTable("wokwi.txt", r, c);
char buf[CELL_WIDTH];
snprintf(buf, sizeof(buf), "% 5d;", value);
Serial.print(buf);
}
Serial.println();
}
}
void loop() {
// Vuoto
}