Buonasera,
mi sono appena scontrato con un errore che non riesco a capire. Immagino mi stia sfuggendo qualcosa nel listato perché non riesco a dare spiegazione logica a quello che mi sta succedendo.
In pratica sono andato a sommare due codici che apparentemente singolarmente funzionano senza problemi. Una volta sommati l'output che ottengo (leggi - scrivi seriale) da un risultato che non riesco a decifrare.
I due codici fanno questo:
- Inizializzare SD e cercare il primo fileIndex vuoto (il nome file è del tipo TEXTxxx.txt) e creare il file
- Leggere da seriale, immagazzinare su un array di char e una volta ottenuto il carattere '\n' stampare a seriale il risultato.
Quando vado a unire i due listati l'output che ottengo dalla seriale è
SD initialization done.
text016.txt
cia
Di seguito il mio codice:
#include <SPI.h>
#include <SD.h>
File myFile;
char fileName[12];
byte i = 0;
char sentence[82];
void setup() {
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
if (!SD.begin(4)) {
Serial.println("SD initialization failed!");
}
else{//SD INITIALIZED
Serial.println("SD initialization done.");
int n = 0;
while(n<20){
snprintf(fileName, sizeof(fileName), "text%03d.txt", n);
fileName[11]=0x00;
if(!SD.exists(fileName)){
Serial.println(fileName);
break;
}
n++;
}
}
}//SETUP CLOSE
void loop() {
while (Serial.available()){
char c = Serial.read();
strcat(&sentence[i], &c);
i++;
if (c=='\n'){
sentence[i]=0x00;
Serial.print(sentence);
sentence[0]=0x00;
i=0;
}
}
}
Ho cercato di capire cosa provocasse il problema mettendo un pezzetto alla volta del codice della SD e mi sono fermato al punto incriminato: quando uso la funzione SD.exists() da problemi. Anche commentando ciò che sta dentro quella funzione il problema permane.
Non capisco come una cosa fatta e finita nel setup possa influenza il loop in questo modo.
Lo sketch occupa il 30% e le variabili il 40% circa della memoria. Sto usando Arduino UNO R3.
Immagino chela soluzione sia banale e mi stia sfuggendo qualcosa.
Grazie,
Andrea