////////////////////////serialEvent RTC set////////////////////////
#include "RTClib.h"
RTC_DS1307 rtc;
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
int yr;
char mo,day,hour,minute,sec;
#define Led1 13
#define Led2 12
char input_state =0;
String inputString = ""; // a string to hold incoming data
char stringComplete = 0;
char oldSec=0;
void setup()
{
pinMode(Led1, OUTPUT);
pinMode(Led2, OUTPUT);
Serial.begin(115200);
lcd.init();
lcd.backlight();
delay(1000);
inputString.reserve(40);
Serial.println(F("Start"));
Serial.print(F("input new data: "));
if (! rtc.begin())
{
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
//rtc.adjust(DateTime(2019, 3, 4, 20, 2, 6));
}
void loop()
{
if (stringComplete)
{
checkSerial();
}
checkRTC();
}
void checkRTC()
{
DateTime now = rtc.now();
if(oldSec!=now.second())
{
Serial.print("Current time: ");
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
lcd.setCursor(0, 0);
lcd.print(now.day(), DEC);
lcd.print('/');
lcd.print(now.month(), DEC);
lcd.print('/');
lcd.print((now.year()-2000), DEC);
lcd.print(' ');
lcd.print(now.hour(), DEC);
lcd.print(':');
if(now.minute()<10)lcd.print('0');
lcd.print(now.minute(), DEC);
lcd.print(':');
if(now.second()<10)lcd.print('0');
lcd.print(now.second(), DEC);
lcd.print(" ");
oldSec=now.second();
}
}
void checkSerial()
{
Serial.println(inputString);
if(inputString=="on1\n") {digitalWrite(Led1,HIGH);}
else if(inputString=="on2\n") {digitalWrite(Led2,HIGH);}
else if(inputString=="off1\n") {digitalWrite(Led1,LOW);}
else if(inputString=="off2\n") {digitalWrite(Led2,LOW);}
else ;
if((inputString[0]=='2')&&(inputString[1]==':'))
{
int pwm=0,pwm1=0,pwm2=0,pwm3=0;
if(inputString[2]!='\n')
{
pwm1=ascii2hex(inputString[2]);
pwm=pwm1;
}
if((inputString[2]!='\n')&&(inputString[3]!='\n'))
{
pwm2=ascii2hex(inputString[3]);
pwm=(pwm1*10)+pwm2;
}
if((inputString[2]!='\n')&&(inputString[3]!='\n')&&(inputString[4]!='\n'))
{
pwm3=ascii2hex(inputString[4]);
pwm=(pwm1*100)+(pwm2*10)+pwm3;
}
Serial.print(F("pwm="));
Serial.println(pwm);
analogWrite(Led2,pwm);
}
if((inputString[0]=='y')&&(inputString[1]==':'))
{
int yr=0,yr1=0,yr2=0;
if(inputString[2]!='\n')
{
yr1=ascii2hex(inputString[2]);
yr=yr1;
}
if((inputString[2]!='\n')&&(inputString[3]!='\n'))
{
yr2=ascii2hex(inputString[3]);
yr=(yr1*10)+yr2;
}
Serial.print(F("year="));
Serial.println(yr+2000);
//yr=now.year();
DateTime now = rtc.now();
mo=now.month();
day=now.day();
hour=now.hour();
minute=now.minute();
sec=now.second();
rtc.adjust(DateTime(yr+2000, mo, day, hour, minute,sec));
}
if((inputString[0]=='m')&&(inputString[1]==':'))
{
int mo=0,mo1=0,mo2=0;
if(inputString[2]!='\n')
{
mo1=ascii2hex(inputString[2]);
mo=mo1;
}
if((inputString[2]!='\n')&&(inputString[3]!='\n'))
{
mo2=ascii2hex(inputString[3]);
mo=(mo1*10)+mo2;
}
Serial.print(F("mo="));
Serial.println(mo);
DateTime now = rtc.now();
yr=now.year();
//mo=now.month();
day=now.day();
hour=now.hour();
minute=now.minute();
sec=now.second();
rtc.adjust(DateTime(yr, mo, day, hour, minute,sec));
}
if((inputString[0]=='d')&&(inputString[1]==':'))
{
int day=0,day1=0,day2=0;
if(inputString[2]!='\n')
{
day1=ascii2hex(inputString[2]);
day=day1;
}
if((inputString[2]!='\n')&&(inputString[3]!='\n'))
{
day2=ascii2hex(inputString[3]);
day=(day1*10)+day2;
}
Serial.print(F("day="));
Serial.println(day);
DateTime now = rtc.now();
yr=now.year();
mo=now.month();
//day=now.day();
hour=now.hour();
minute=now.minute();
sec=now.second();
rtc.adjust(DateTime(yr, mo, day, hour, minute,sec));
}
if((inputString[0]=='t')&&(inputString[1]==':'))
{
int hour=0,hour1=0,hour2=0;
//int index=2;
if(inputString[2]!=':')
{
hour1=ascii2hex(inputString[2]);
hour=hour1;
}
if((inputString[2]!=':')&&(inputString[3]!=':'))
{
hour2=ascii2hex(inputString[3]);
hour=(hour1*10)+hour2;
}
int minute=0,minute1=0,minute2=0;
if(inputString[5]!=':')
{
minute1=ascii2hex(inputString[5]);
minute=minute1;
}
if((inputString[5]!=':')&&(inputString[6]!=':'))
{
minute2=ascii2hex(inputString[6]);
minute=(minute1*10)+minute2;
}
int sec=0,sec1=0,sec2=0;
if(inputString[8]!=':')
{
sec1=ascii2hex(inputString[8]);
sec=sec1;
}
if((inputString[8]!=':')&&(inputString[9]!=':'))
{
sec2=ascii2hex(inputString[9]);
sec=(sec1*10)+sec2;
}
Serial.print(F("time="));
Serial.print(hour);
Serial.print(":");
Serial.print(minute);
Serial.print(":");
Serial.println(sec);
DateTime now = rtc.now();
yr=now.year();
mo=now.month();
day=now.day();
//hour=now.hour();
//minute=now.minute();
//sec=now.second();
rtc.adjust(DateTime(yr, mo, day, hour, minute,sec));
}
inputString = ""; // clear the string:
stringComplete = false;
}
void serialEvent()
{
while (Serial.available())
{
// get the new byte:
char inChar = (char)Serial.read();
// add it to the inputString:
inputString += inChar;
if (inChar == '\n') // if newline,
{
stringComplete = true;
}
}
}
byte ascii2hex(byte in)
{
byte ret=0;
switch (in)
{
case '0': ret=0; break;
case '1': ret=1; break;
case '2': ret=2; break;
case '3': ret=3; break;
case '4': ret=4; break;
case '5': ret=5; break;
case '6': ret=6; break;
case '7': ret=7; break;
case '8': ret=8; break;
case '9': ret=9; break;
case 'a': ret=10; break;
case 'b': ret=11; break;
case 'c': ret=12; break;
case 'd': ret=13; break;
case 'e': ret=14; break;
case 'f': ret=15; break;
case 'A': ret=10; break;
case 'B': ret=11; break;
case 'C': ret=12; break;
case 'D': ret=13; break;
case 'E': ret=14; break;
case 'F': ret=15; break;
}
return ret;
}