Ciao a tutti,
cortesemente se mi potete aiutare su un problema nella scrittura di un file su SD, in pratica dopo un certo numero di scrittura il file viene corrotto, o in alcuni casi ricevo un messaggio di errore "error code: 0x6", non c'è una costante nell'errore, a volte capita dopo pochi minuti, a volte dopo diverse ore. Ho provato anche a cambiare la modalità SPI sostituire la SD sia di formato che di produttore.
questo è il codice
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SdFat.h>
#define ONE_WIRE_BUS 2
// SD chip select pin
const uint8_t chipSelect = 10;
SdFat sd;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress insideThermometer;
unsigned long timeWait;
int numInterval;
char ID[] = "12345";
void setup(void)
{
Serial.begin(19200);
sensors.begin();
if (!sensors.getAddress(insideThermometer, 0))
Serial.println("Unable to find address for Device 0");
Serial.print("Init SD card...");
if (!sd.begin(chipSelect,SPI_HALF_SPEED)) { //oppure SPI_SIXTEENTH_SPEED
sd.initErrorHalt();
Serial.print("error \n");
} else {
Serial.print("ok \n");
}
numInterval = 4;
timeWait = 120;
}
void GetDataLog()
{
byte nlog = 1;
do {
delay(timeWait*1000);
ofstream sdlog("datalog.txt", ios::out | ios::app);
sdlog << ID << "|" << getTemp() << endl;
if (!sdlog)
sd.errorHalt("append failed");
Serial.print(ID);Serial.println(getTemp());
} while(nlog++ < numInterval);
}
float getTemp()
{
sensors.requestTemperatures();
return sensors.getTempC(insideThermometer);
}
void loop(void)
{
GetDataLog();
/*GPRS
invio log...
*/
}
la schield SD è posta sopra a quella del GPRS
grazie