Hello,
I like to log the data from a SHT075,BMP085, and a RTCDS3234 on a SD card. This all works fine.
Bud the file is marked only logfilexx.csv.
Every new file is incremented till 99.
Bud what I like to realise is to close the file at midnight 23;59;59 and opend a new file with day and month time stamp in the file name
like 0812.csv
Any help is welcome.
Theo
ps shis is teh last part of my code inwhich i like to have the filename code.
[code
void loop()
{
char cmd;
int humidVal;
int tempVal ;
unsigned char statusVal;
float fHumidity;
float fTemperature;
float dewPoint;
unsigned char error;
unsigned int port;
float Temperature;
float Humidity;
float logEx;
float Dauwpunt;
float t;
float rhLin;
float rhTrue;
float tC;
float rh;
int dag;
int maand;
Serial.begin(9600);
delay(30000);
port=5;
sMeasure ((unsigned char *)&tempVal, MEASURE_TEMP, 0, port); // leest de temp waarde grof uit de SHT
sMeasure ((unsigned char *)&humidVal, MEASURE_HUMI, 0, port);
#define C1 -2.0468
#define C2 +0.0367
#define C3 -0.0000015955
/* Constants for temperature-compensated relative humidity */
#define T1 +0.01
#define T2 +0.00008
/* Constants for conversion of temperature reading to Centigrade */
//#define D1 -40.10 //5.0V operation
#define D1 -39.651 //3.3V operation geinterpoleerd uit data sheet
#define D2 +0.01
t = float(tempVal); // ruwe SHT temp waarde omzetten naar float
tC = ( t / 100 ) - 39.651; /* Linear conversion of temperature geeft te lage waardes met deze wijze van berekening*/
rh = float(humidVal); // ruwe SHT humid waarde omzetten naar float
rhLin = C1 + ( C2 * rh ) + ( C3 * rh * rh ); /* "ticks" to relative H geeft denk ik de juiste waardes met deze wijze van berekening */
rhTrue = ( tC - 25 ) * ( T1 + ( T2 * rh )) + rhLin; // is compensatie voor als als temp veel afwijkt van 25 graden
// rhLin = -2.0468 +( +0.0367 * rh ) + ( -0.0000015955 * rh * rh ); // waarde volgens datasheet ruwe waarde omrekenen naar werkelijke waarde
// Tn = 243.12 constante voor berekening 0 - 50 Dgr above water
// m = 17.62 constante voor berekening 0 - 50 dgr boven water
Dauwpunt = 243.12 * ( log ( rhLin / 100 ) + (( 17.62 * tC) / ( 243.12 + tC ))) /
( 17.62 - ((log( rhLin / 100 )) - ( 17.62 * tC ) / ( 243.12 + tC ))); // nieuwe berekening volgend de data sheet met rhLin.
char tCValue = tC;
char rhTrueValue = rhTrue;
char DauwpuntValue = Dauwpunt;
Serial.print(ReadTimeDate());
Serial.print(",");
Serial.print(tCValue,DEC);
Serial.print(",");
Serial.print(rhTrueValue, DEC);
Serial.print(",");
Serial.print(DauwpuntValue, DEC);
Serial.print(",");
port=-0; // zet de port weer uit i.v.m. opwarmen sensor < 10% in tijd spanning erop
delay(100); // vertraging om port 10 sec uit te schakelen i.v.m. opwarmen. Dus elke 10 sec. een meting.
int temperature = 0;
long pressure = 0;
b.oss=3;
long datum;
bmp085_read_sensors(&b);
delay(100);
Serial.print(b.t,1);
Serial.print(",");
Serial.println(b.ppa);
delay(500);
{
File dataFile = SD.open("test0.csv", FILE_WRITE);
// if the file is available, write to it:
if (q==0){
dataFile.println("DATE ,TIME ,Temp ,Humid ,Dauwp ,temp,luchtdr. ");
if (dataFile) {// 00/00/00,00:00:00,23.52,53.67,11.31,12.56, Temp ,
q=1;
dataFile.close();
}
else
{
Serial.println("error opening datalog.csv"); // if the file isn't open, pop up an error:
}
}
else
{
dataFile.print(ReadTimeDate());
dataFile.print(",");
dataFile.print(tC,2);
dataFile.print(",");
dataFile.print(rhTrue,2);
dataFile.print(",");
dataFile.print(Dauwpunt,2);
dataFile.print(",");
dataFile.print(b.t,1);
dataFile.print(" ,");
dataFile.println(b.ppa);
dataFile.close();
}
}
}
//=====================================
int RTC_init(){
pinMode(cs,OUTPUT); // chip select
// start the SPI library:
SPI.begin();
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE3); // both mode 1 & 3 should work
//set control register
digitalWrite(cs, LOW);
SPI.transfer(0x8E);
SPI.transfer(0x60); //60= disable Osciallator and Battery SQ wave @1hz, temp compensation, Alarms disabled
digitalWrite(cs, HIGH);
delay(10);
}
//=====================================
int SetTimeDate(int d, int mo, int y, int h, int mi, int s){
int TimeDate [7]={s,mi,h,0,d,mo,y};
for(int i=0; i<=6;i++){
if(i==3)
i++;
int b= TimeDate[i]/10;
int a= TimeDate[i]-b*10;
if(i==2){
if (b==2)
b=B00000010;
else if (b==1)
b=B00000001;
}
TimeDate[i]= a+(b<<4);
digitalWrite(cs, LOW);
SPI.transfer(i+0x80);
SPI.transfer(TimeDate[i]);
digitalWrite(cs, HIGH);
}
}
//=====================================
String ReadTimeDate(){
String temp;
int uur;
int minu;
int sec;
int var;
int ver;
pinMode(7, OUTPUT);
int TimeDate [7]; //second,minute,hour,null,day,month,year
for(int i=0; i<=6;i++){
if(i==3)
i++;
digitalWrite(cs, LOW);
SPI.transfer(i+0x00);
unsigned int n = SPI.transfer(0x00);
digitalWrite(cs, HIGH);
int a=n & B00001111;
if(i==2){
int b=(n & B00110000)>>4; //24 hour mode
if(b==B00000010)
b=20;
else if(b==B00000001)
b=10;
TimeDate[i]=a+b;
}
else if(i==4){
int b=(n & B00110000)>>4;
TimeDate[i]=a+b*10;
}
else if(i==5){
int b=(n & B00010000)>>4;
TimeDate[i]=a+b*10;
}
else if(i==6){
int b=(n & B11110000)>>4;
TimeDate[i]=a+b*10;
}
else{
int b=(n & B01110000)>>4;
TimeDate[i]=a+b*10;
}
}
temp.concat(TimeDate[4]);
var=TimeDate[4]; // dit zijn de dagen
temp.concat("/") ;
temp.concat(TimeDate[5]);
ver=TimeDate[5]; // dit zijn de maand
temp.concat("/") ;
temp.concat(TimeDate[6]);
temp.concat(" ,") ;
temp.concat(TimeDate[2]);
uur=TimeDate[2]; // dit zijn de uren
temp.concat(":") ;
temp.concat(TimeDate[1]);
minu=TimeDate[1]; // dit zijn de minuten
temp.concat(":") ;
temp.concat(TimeDate[0]);
sec=TimeDate[0]; // dit zijn de seconden
temp.concat(" ");
if(uur==23){
if(minu==59){
if(sec==58){
z=1;
}
}
}
if(z==1){ digitalWrite(7,HIGH); // test of het werkt schakelen op 23 uur 59 minuten en 58 seconden het werkt.
delay(1000); // hou het signaal 1 seconde hoog
z=0 ;
digitalWrite(7, LOW);
}
return(temp);
}
]