#include <SdFat.h>
#include <EEPROM.h>
#include <PowerSaver.h>
#include <DS3234lib3.h>
char filename[15] = "corelog.csv";
PowerSaver chip;
DS3234 myTime;
SdFat sd;
SdFile file;
#define POWER 4
#define myTimePOWER 5
#define errorHandler 3
int microSDCSPin = 10; //microSDCSPin
int LvlState1 = 0, LvlState2 = 0, LvlState3 = 0, LvlState4 = 0;
ISR(PCINT0_vect)
{
asm("nop");
}
/*SETUP*/
void setup()
{
Serial.begin(9600);
pinMode(POWER, OUTPUT);
pinMode(myTimePOWER, OUTPUT);
pinMode(errorHandler, OUTPUT);
digitalWrite(POWER, HIGH);
digitalWrite(myTimePOWER, HIGH);
delay(1);
// ERROR HANDlER
if(!sd.begin( microSDCSPin, SPI_FULL_SPEED))
{
delay(10);
sd.initErrorHalt();
}
// ERROR HANDLER
else
{
delay(10);
file.open(filename, O_CREAT | O_APPEND | O_WRITE);
delay(1);
String time = myTime.timeStamp();
file.println();
file.print("Date/Time - Monitoring");
file.println();
PrintFileTimeStamp();
file.close();
digitalWrite(errorHandler, HIGH);
delay(10);
digitalWrite(errorHandler, LOW);
}
chip.sleepInterruptSetup();
}
void loop()
{
digitalWrite(POWER, LOW);
digitalWrite(myTimePOWER, LOW);
delay(1);
chip.turnOffADC();
chip.turnOffSPI();
//chip.turnOffWDT();
chip.turnOffBOD();
chip.goodNight();
chip.turnOnADC();
chip.turnOnSPI();
delay(1);
digitalWrite(POWER, HIGH);
digitalWrite(myTimePOWER, HIGH);
delay(10);
myTime.checkDST();
printToSD();
delay(2000);
}
/* Print Data to microSD */
void printToSD()
{
pinMode(microSDCSPin, OUTPUT);
if(!sd.begin( microSDCSPin, SPI_FULL_SPEED))
{
delay(10);
sd.initErrorHalt();
}
else
{
delay(10);
file.open(filename, O_WRITE | O_AT_END);
delay(1);
String settime = myTime.timeStamp();
SPCR = 0; //SPI Registers
LvlState1 = digitalRead(2);
LvlState2 = digitalRead(5);
LvlState3 = digitalRead(6);
LvlState4 = digitalRead(7);
if(LvlState1 == 1)
{
file.print("Level - 1");
file.print(settime);
file.print(",");
file.print("0");
file.println();
file.print(settime);
file.print(",");
file.print("1");
}
else if(LvlState1 == 0)
{
file.print(settime);
file.print(",");
file.print("1");
file.println();
file.print(settime);
file.print(",");
file.print("0");
}
if(LvlState2 == 1)
{
file.print("Level - 2");
file.print(settime);
file.print(",");
file.print("0");
file.println();
file.print(settime);
file.print(",");
file.print("1");
}
else if(LvlState2 == 0)
{
file.print(settime);
file.print(",");
file.print("1");
file.println();
file.print(settime);
file.print(",");
file.print("0");
}
if(LvlState3 == 1)
{
file.print("Level - 3");
file.print(settime);
file.print(",");
file.print("0");
file.println();
file.print(settime);
file.print(",");
file.print("1");
}
else if(LvlState3 == 0)
{
file.print(settime);
file.print(",");
file.print("1");
file.println();
file.print(settime);
file.print(",");
file.print("0");
}
if(LvlState4 == 1)
{
file.print("Level - 4");
file.print(settime);
file.print(",");
file.print("0");
file.println();
file.print(settime);
file.print(",");
file.print("1");
}
else if(LvlState4 == 0)
{
file.print(settime);
file.print(",");
file.print("1");
file.println();
file.print(settime);
file.print(",");
file.print("0");
}
file.println();
PrintFileTimeStamp();
file.close();
digitalWrite(errorHandler, 1);
delay(10);
digitalWrite(errorHandler, 0);
}
}
/*Write time stamp function*/
void PrintFileTimeStamp()
{
file.timestamp(T_WRITE, myTime.year, myTime.month, myTime.day, myTime.hour, myTime.minute, myTime.second);
file.timestamp(T_ACCESS, myTime.year, myTime.month, myTime.day, myTime.hour, myTime.minute, myTime.second);
}
// microSD Card Error Handler
void SDcardError()
{
for(int i=0;i<3;i++) //ERROR
{
digitalWrite(errorHandler, HIGH);
delay(50);
digitalWrite(errorHandler, LOW);
delay(150);
}
}