/*
DS3231_test.pde
Eric Ayars
4/11 Test/demo of read routines for a DS3231 RTC. Turn on the serial monitor after loading this to check if things are
working as they should. */ #include <DS3231.h>
#include <Wire.h>
#include <EEPROM.h> #define powerPin 7
DS3231 Clock; String ReceivedCache="";
String BTime="2010-07-24 11:15:00";
String ETime="2010-07-24 11:15:00";
boolean isFire=false; void setup() {
// Start the I2C interface
Wire.begin();
Clock.setClockMode(false);
Serial.begin();
pinMode(powerPin,OUTPUT);
digitalWrite(powerPin,LOW);
Clock.turnOnAlarm();
RetrieveFireSet();
} void loop() { handleCmd();
checkFire();
} void checkFire(){
String dateTime=GetTime();
if(dateTime>=BTime && dateTime<=ETime){
digitalWrite(powerPin,HIGH);
isFire=true;
}else{
digitalWrite(powerPin,LOW);
isFire=false;
}
} String formatNum(int a){
if(a<)return "" +(String)a;
return (String)a;
} String GetTime(){
bool Century=false;
bool h12=false;
bool PM=false;
int second,minute,hour,date,month,year,temperature;
second=Clock.getSecond();
minute=Clock.getMinute();
hour=Clock.getHour(h12, PM);
date=Clock.getDate();
month=Clock.getMonth(Century);
year=Clock.getYear(); String dateTime="" +formatNum(year) +"-"
+formatNum(month) +"-"
+formatNum(date) +" "
+formatNum(hour) +":"
+formatNum(minute)+":"
+formatNum(second);
return dateTime;
} void handleGetTime(){ String dateTime=GetTime();
Serial.println("OK:"+dateTime); }
void handleSetTime(){ int second,minute,hour,date,month,year,dayOfWeek;
String dateTime=ReceivedCache.substring(,); year =dateTime.substring(,).toInt();
month =dateTime.substring(,).toInt();
date=dateTime.substring(,).toInt(); hour=dateTime.substring(,).toInt();
minute=dateTime.substring(,).toInt();
second=dateTime.substring(,).toInt();
dayOfWeek=dateTime.substring(,).toInt();
Clock.setSecond(second);//Set the second
Clock.setMinute(minute);//Set the minute
Clock.setHour(hour); //Set the hour
Clock.setDoW(dayOfWeek); //Set the day of the week
Clock.setDate(date); //Set the date of the month
Clock.setMonth(month); //Set the month of the year
Clock.setYear(year); //Set the year (Last two digits of the year) Serial.println("OK:");
} void handleGetFire(){
String tmp=_ReadFireSet();
if(tmp==""){
Serial.println("EE:fire time not set!");
}else{
Serial.println("OK:" + tmp);
}
} void handleSetFire(){ for(int address=;address<;address++){
EEPROM.write(address,(byte)ReceivedCache[address]);
//Serial.print((char)EEPROM.read(address));
}
//Serial.println("");
String bTime=ReceivedCache.substring(,);
String eTime=ReceivedCache.substring(,);
bool flag=RetrieveFireSet();
// Serial.println("flag:" + (String)flag);
if(flag && (bTime==BTime && eTime==ETime)){
Serial.println("OK:");
}else{
Serial.println("EE:Set Fail");
}
} String _ReadFireSet(){
int address=;
String tmp="";
char readChar=' ';
for(int address=;address<;address++){
readChar=(char)EEPROM.read(address);
tmp +=readChar;
} if(tmp!="SetF:"){
return "";
} tmp="";
for(int address=;address<;address++){
readChar=(char)EEPROM.read(address);
tmp +=readChar;
}
//Serial.println(tmp);
return tmp;
} bool RetrieveFireSet(){
String tmp=_ReadFireSet();
if(tmp==""){
return false;
}else{
BTime=tmp.substring(,);
ETime=tmp.substring(,);
return true;
}
} //read Serial data and hand command
//
void handleCmd(){
char readChar=' '; while(Serial.available()>){
readChar=(char)Serial.read();
ReceivedCache =ReceivedCache+ (String)readChar;
//delayMicroseconds(10);
}
//Serial.println("ABC");
// Serial.println(ReceivedCache);
if(ReceivedCache.startsWith("GetT:")){
handleGetTime();
ReceivedCache=ReceivedCache.substring(); }else if(ReceivedCache.startsWith("SetT:")){
//like->SetT:2015-07-24 16:54:23,7
if(ReceivedCache.length()>=){
handleSetTime();
ReceivedCache=ReceivedCache.substring();
}
}else if(ReceivedCache.startsWith("GetS:")){
Serial.println("OK:"+(String)isFire);
ReceivedCache=ReceivedCache.substring();
}else if(ReceivedCache.startsWith("GetF:")){
handleGetFire();
ReceivedCache=ReceivedCache.substring();
}else if(ReceivedCache.startsWith("SetF:")){
if(ReceivedCache.length()>=){
handleSetFire();
ReceivedCache=ReceivedCache.substring();
}
}else if(ReceivedCache.startsWith("GetC:")){
int temperature=Clock.getTemperature();
Serial.println("OK:" +(String)temperature);
ReceivedCache=ReceivedCache.substring();
}
else{
if(ReceivedCache.length()>=){
ReceivedCache="";
}
} if(readChar=='\n')ReceivedCache="";
}