I'm using 0018... and here is the whole code
#include <SdFat.h>
#include <SdFatUtil.h>
#include <Wire.h>
#include <math.h>
#include <WProgram.h>
#include <DS1307.h>
#include <ctype.h>
Sd2Card card;
SdVolume volume;
SdFile root;
SdFile file;
int r0 = 0; //value select pin at the 4051 (s0)
int r1 = 0; //value select pin at the 4051 (s1)
int r2 = 0; //value select pin at the 4051 (s2)
int row = 0; // storeing the bin code
int count = 0; // just a count
int bin [] = {000, 1, 10, 11, 100, 101, 110, 111};
int state;
char name [32];
char sb;
unsigned long time;
int buttonState = 0;
extern volatile unsigned long timer0_overflow_count;
double getVoltage(int pin)
{
double vin;
int value =analogRead(pin);
vin = ((value * 5.0) / 1024.0)*((110.0 + 230.0)/110.0);
return vin;
}
double Thermister(int pin)
{
float Temp;
int RawADC = analogRead(pin);
Temp = log(((10240000/RawADC) - 10000));
Temp = 1 / (0.001129148 + (0.000234125 * Temp) + (0.0000000876741 * Temp * Temp * Temp));
Temp = Temp - 273.15; // Convert Kelvin to Celcius
return Temp;
}
void setup(void)
{
Serial.begin(9600);
analogWrite(5,255);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(10, OUTPUT);
card.init();
volume.init(card);
root.openRoot(volume);
sprintf(name,"%d%d%d.CSV",RTC.get(DS1307_DATE,true),RTC.get(DS1307_MTH,true),RTC.get(DS1307_YR,true));
}
void loop(void){
timer0_overflow_count=0;
unsigned long loopStart=millis();
unsigned long waitTime = loopStart + 30000;
buttonState = digitalRead(6);
if (buttonState == HIGH) state=1;
else if(buttonState == LOW) state=0;
else state = 0;
if(Serial.available())
{
sb = Serial.read();
if(sb=='v')
{
Serial.print(RTC.get(DS1307_HR,true)); //read the hour and also update all the values by pushing in true
Serial.print(":");
Serial.print(RTC.get(DS1307_MIN,false));//read minutes without update (false)
Serial.print(":");
Serial.print(RTC.get(DS1307_SEC,false));//read seconds
Serial.print("\t"); // some space for a more happy life
Serial.print(RTC.get(DS1307_DATE,false));//read date
Serial.print("/");
Serial.print(RTC.get(DS1307_MTH,false));//read month
Serial.print("/");
Serial.print(RTC.get(DS1307_YR,false)); //read year
Serial.println();
Serial.print("verify state: ");
Serial.println(state);
Serial.print("verify time: ");
Serial.print(RTC.get(DS1307_HR,true));
Serial.print(":");
Serial.print(RTC.get(DS1307_MIN,false));
Serial.print(":");
Serial.println(RTC.get(DS1307_SEC,false));
Serial.print("temperature: ");
Serial.println(Thermister(1));
for (count=0; count<1; count++) {
row = bin[count];
r0 = row & 0x01;
r1 = (row>>1) & 0x01;
r2 = (row>>2) & 0x01;
digitalWrite(2, r0);
digitalWrite(3, r1);
digitalWrite(4, r2);
Serial.print("v");
Serial.print(count);
Serial.print(": ");
Serial.println(getVoltage(0));
}
}
}
if(state==1);
{
file.open(root, name, O_CREAT | O_APPEND | O_WRITE);
file.print(RTC.get(DS1307_HR,true)); //read the hour and also update all the values by pushing in true
file.print(":");
file.print(RTC.get(DS1307_MIN,false));//read minutes without update (false)
file.print(":");
file.print(RTC.get(DS1307_SEC,false));//read seconds
file.print(" "); // some space for a more happy life
file.print(RTC.get(DS1307_DATE,false));//read date
file.print("/");
file.print(RTC.get(DS1307_MTH,false));//read month
file.print("/");
file.print(RTC.get(DS1307_YR,false)); //read year
file.print(",");
for (count=0; count<1; count++) {
row = bin[count];
r0 = row & 0x01;
r1 = (row>>1) & 0x01;
r2 = (row>>2) & 0x01;
digitalWrite(2, r0);
digitalWrite(3, r1);
digitalWrite(4, r2);
file.print(getVoltage(0));
file.print(",");
}
//file.println();
file.print(Thermister(1));
file.print(",");
file.println(millis());
file.close();
}
//if(!Serial.available()&&!buttonState==LOW) delay(30000);
do
{
//subroutine
}
while(millis()<waitTime&&!Serial.available()&&!buttonState==LOW);
}
And we experienced it twice that if we leave the Arduino running for more than 8 hours the SD card losses all information and becomes blank. I'm using a 2GB sd card