Estoy usando Arduino Uno y Ethernet Shield con una tarjeta SD de 2GB. Tengo el siguiente código de trabajo que se utilizará para escribir datos en la tarjeta SD ( nota : la biblioteca de SD está correctamente iniciada y solo oculto el código reated para mantener las cosas más pequeñas):
class Logger {
private:
File myFile;
char *myFilename;
public:
Logger (char *myFilename = "text.txt") : myFilename(myFilename) {
myFile = SD.open(myFilename, FILE_WRITE);
}
void writeAction () {
if (myFile) {
myFile.print("Sample text.");
myFile.close();
} else {
Serial.print("Error opening the file ");
}
}
};
void setup() {
Logger logger;
...
logger.writeAction();
}
Sin embargo, si cambio un poco el código anterior como se indica en el siguiente, no funcionará como se esperaba: el "Sample text."
es no escrito / guardado en la tarjeta SD.
class Logger {
private:
File myFile;
char *myFilename;
public:
Logger (char *myFilename = "text.txt") : myFilename(myFilename) {
// Note: Here is the change. File opening statements are moved
// "inside" the writeAction function.
}
void writeAction () {
myFile = SD.open(myFilename, FILE_WRITE);
if (myFile) {
myFile.print("Sample text.");
myFile.close();
} else {
Serial.print("Error opening the file ");
}
}
};
void setup() {
Logger logger;
...
logger.writeAction();
}
¿Por qué sucede? ¿Cómo puedo hacer que myFile
se abra y cierre correctamente "dentro" de la función writeAction
?