Buongiorno, vi scrivo per un problema forse stupido.
Sto giocando con una Mega originale e un modulo SD esterno su cui scrivo/leggo dati. Il problema è che nel momenti in cui avvio il programma la SD viene rilevata, mentre se faccio lo stesso controllo durante il loop mi viene rilevata come non presente.
Mi sono ridotto a testare solo la SD senza far altro eppure viene rilevata sempre e solo all'avvio.
Cosa sto sbagliando?
// SD CARD
// MISO->50, MOSI->51, SCK->52
const int chipSelect = 53; //CS
void setup() {
pinMode(chipSelect, OUTPUT);
digitalWrite (chipSelect, HIGH);
Serial.print("Initializing SD card...");
// see if the card is present and can be initialized:
if (!SD.begin(chipSelect)) Serial.println("Card failed, or not present");
else Serial.println("card initialized.");
letturaSd_Ph() ; //qui stampo tutte le righe di testo presenti nella SD e vi confermo che vengono lette
}
void loop() {
if (!SD.begin(chipSelect)) Serial.println("Card failed, or not present");
else Serial.println("card initialized.");
delay(1000);
}
Non sono mica sicuro che la begin() possa essere usata più volte dato che fa l'inizializzazione della libreria, del SPI, l'allocazione dei buffer, ecc. ecc. :
La begin() dovrebbe servire SOLO per l'inizializzazione che si fa una volta all'inizio del programma.
Prova a usare la libreria sdfat in quella il metodo begin chiude tutto e dovrebbe restituirti il volore corretto anche se richiamata più volte nel loop
Pensandoci su meglio però è il caso che controlli l'effettiva esistenza dei file che devo andare a leggere. Ad ogni modo terrò a mente il tuo consiglio nell'eventualità dovesse servirmi.
Ne approfitto per farvi un'altra domanda riguardo alle SD, c'è un limite massimo di righe che si possono scrivere su un file .txt o dipende solo dalla dimensione della SD ?
I lettori di SD che conosco limitano il formato delle schede compatibili non solo come dimensione massima della SD stessa ma anche come file system, ossia anche se il lettore e la libreria potrebbero supportare FAT32 si consiglia FAT16.
Con queste limitazioni un file non può essere più grande di 2Gbyte (non so se lettore e libreria supportino LFS che permetterebbe 4Gbyte), per cui non si parla di "righe". Se ti bastano massimo 2Gbyte per file dovresti farcela, ma ti conviene vedere le specifiche del lettore di schede SD che hai, e della libreria SD che vuoi usare.
Grazie per la precisazione. Farò qualche verificare riguardo a questo.. Nel frattempo ho implementato un programmino che ridimensiona il file di testo tenendo conto degli ultimi "n" record (righe) salvati