//YWROBOT
//Compatible with the Arduino IDE 1.0
//Library version:1.1
#include "RTClib.h"
#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>
#include <EEPROM.h>
SoftwareSerial BT(0,1);
RTC_DS1307 rtc;
char DOW[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x27 for a 16 chars and 2 line display
int b1data,b2data,b3data,b4data,b5data;
int led1,led2,led3,led4;
int Hour,Minute,Second,Year,Month,Day;
int SVD0,SVD1,SVD2,SVD3,SVD4,SVD5,SVD6;
byte box[8] = { 0b11111, 0b11111,0b11111, 0b11111,0b1111,0b11111,0b11111, 0b11111 };
byte a[8] = { B00001, B00011, B00111, B01110, B11110, B11111, B11111, B11111 };
byte b[8] = { B11111, B11111, B11111, B01110,B01110, B11111, B11111, B11111 };
byte c[8] = {B10000,B11000,B11100, B01110, B01111, B11111, B11111,B11111 };
byte d[8] = {B11011, B11000, B11100,B11110, B01111,B00111, B00011, B00001 };
byte e[8] = {B11111, B00000, B00000, B00000, B00000, B11111, B11111, B11111 };
byte f[8] = {B11011, B00011, B00111, B01111,B11110, B11100, B11000, B10000 };
byte boll[8] = {0b00000,0b01110,0b11111,0b11111,0b11111,0b01110, 0b00000,0b00000 };
void Clocklogo(){
byte cl1[8] = { B11100, B11100, B11101, B00011,B00111,B01111,B01111,B01111};
byte cl2[8] = {B11111,B00100,B11111,B11011,B11011,B11011,B11011,B10001};
byte cl3[8] = {B00111,B00111,B10111,B11000,B11100,B11110,B11110,B11110};
byte cl4[8] = {B01111,B01111,B01110,B00101,B00111,B01111,B11100,B11000};
byte cl5[9] = {B10001,B01111,B11111,B11111,B11111,B11111,B00000,B00000};
byte cl6[8] = {B11110,B11110,B11110,B11100,B11100,B11110,B00111,B00011
};
lcd.createChar(0,cl1);
lcd.setCursor(8,0);
lcd.write((byte)0);
lcd.createChar(1, cl2);
lcd.setCursor(9,0);
lcd.write((byte)1);
lcd.createChar(2, cl3);
lcd.setCursor(10,0);
lcd.write((byte)2);
lcd.createChar(3, cl4);
lcd.setCursor(8,1);
lcd.write((byte)3);
lcd.createChar(4, cl5);
lcd.setCursor(9,1);
lcd.write((byte)4);
lcd.createChar(5, cl6);
lcd.setCursor(10,1);
lcd.write((byte)5);
lcd.setCursor(3,3);
lcd.write((byte)6);
lcd.setCursor(16,3);
lcd.write((byte)6);
int bTM = digitalRead(3);
if(b3data == 0){
lcd.setCursor(4,2);
lcd.print("_Timer Mode_");
lcd.setCursor(9,3);
lcd.print("OK");
}
if(bTM == 0){
b3data++;
lcd.setCursor(2,2);
lcd.print(" ");
lcd.setCursor(6,3);
lcd.print (" ");
}
if(b3data == 1){
setMinute();
}
if(b3data == 2){
setHour();
}
if(b3data == 3)
{
power1();
}
if(b3data == 4){
power2();
}
if(b3data == 5){
power3();
}
if(b3data == 6){
power4();
}
if(b3data == 7){
b3data = 0;
}
}
void power1(){
lcd.setCursor(6,2);
lcd.print("Power_1");
int bPW1 = digitalRead(4);
if(bPW1 == 0){
led1++;
lcd.setCursor(5,3);
lcd.print(" ");
}
else if(led1 == 1){
EEPROM.write(0,led1);
lcd.setCursor(9,3);
lcd.print("ON");
}
else if(led1 == 2){
led1 = 0;
EEPROM.write(0,led1);
}
else{
lcd.setCursor(9,3);
lcd.print("OFF");
}
}
void power2(){
lcd.setCursor(6,2);
lcd.print("Power_2");
int bPW2 = digitalRead(4);
if(bPW2 == 0){
led2++;
lcd.setCursor(5,3);
lcd.print(" ");
}
else if(led2 == 1){
lcd.setCursor(9,3);
lcd.print("ON");
EEPROM.write(1,led2 );
}
else if(led2 == 2){
led2 = 0;
EEPROM.write(1,led2 );
}
else{
lcd.setCursor(9,3);
lcd.print("OFF");
}
}
void power3 (){
lcd.setCursor(6,2);
lcd.print("Power_3 ");
int bPW3 = digitalRead(4);
if(bPW3 == 0){
led3++;
lcd.setCursor(5,3);
lcd.print(" ");
}
else if(led3 == 1){
EEPROM.write(2,led3 );
lcd.setCursor(9,3);
lcd.print("ON");
}
else if(led3 == 2){
led3 = 0;
EEPROM.write(2,led3 );
}
else{
lcd.setCursor(9,3);
lcd.print("OFF");
}
}
void power4(){
lcd.setCursor(6,2);
lcd.print("Power_4");
int bPW4 = digitalRead(4);
if(bPW4 == 0){
led4++;
lcd.setCursor(5,3);
lcd.print(" ");
}
else if(led4 == 1){
EEPROM.write(3,led4 );
lcd.setCursor(9,3);
lcd.print("ON");
}
else if(led4 == 2){
led4 = 0;
EEPROM.write(3,led4 );
}
else{
lcd.setCursor(9,3);
lcd.print("OFF");
}
}
void setMinute(){
lcd.setCursor(5,2);
lcd.print("SET MINUTES");
lcd.setCursor(9,3);
lcd.print(b4data);
int bMT1 = digitalRead(4);
int bMT2 = digitalRead(5);
if(bMT1 == 0){
b4data++;
EEPROM.write(5,b4data);
}
if(bMT2 == 0){
b4data--;
EEPROM.write(5,b4data);
}
if(b4data == -1 || b4data == 9 || b4data == 59){
lcd.setCursor(5,3);
lcd.print(" ");
}
if(b4data == -1 || b4data == 59){
b4data = 0;
}
}
void setHour(){
lcd.setCursor(5,2);
lcd.print("SET HOURS");
lcd.setCursor(9,3);
lcd.print(b5data);
int bHR1 = digitalRead(4);
int bHR2 = digitalRead(5);
if(bHR1 == 0){
b5data++;
EEPROM.write(6,b5data);
}
if(bHR2 == 0){
b5data--;
EEPROM.write(6,b5data);
}
if(b5data == -1 || b5data == 9 || b5data == 24){
lcd.setCursor(6,3);
lcd.print(" ");
}
if(b5data == -1 || b5data == 24){
b5data = 0;
}
}
void Btlogo(){
byte bt1[8] ={B00011,B00111,B01111,B11011,B11101,B11110,B11111,B11111};
byte bt2[8] ={B11111,B11001,B11010,B11011,B11011,B11011,B01010,B10001};
byte bt3[8] = {B11000,B11100,B11110,B01111,B01111,B01111,B11111,B11111};
byte bt4[8] = {B11111,B11111,B11110,B11101,B11011,B01111,B00111,B00011 };
byte bt5[8] = {B10001,B01010,B11011,B11011,B11011,B11010,B11001,B11111 };
byte bt6[8] = {B11111,B11111,B01111,B01111,B01111,B11110,B11100,B11000 };
lcd.createChar(0,bt1);
lcd.setCursor(8,0);
lcd.write((byte)0);
lcd.createChar(1,bt2);
lcd.setCursor(9,0);
lcd.write((byte)1);
lcd.createChar(2,bt3);
lcd.setCursor(10,0);
lcd.write((byte)2);
lcd.createChar(3, bt4);
lcd.setCursor(8,1);
lcd.write((byte)3);
lcd.createChar(4,bt5);
lcd.setCursor(9,1);
lcd.write((byte)4);
lcd.createChar(5,bt6);
lcd.setCursor(10,1);
lcd.write((byte)5);
lcd.setCursor(2,2);
lcd.print ("_Bluetooth mode_");
lcd.setCursor(3,3);
lcd.write((byte)6);
lcd.setCursor(16,3);
lcd.write((byte)6);
int bBt = digitalRead(3);
if(bBt == 0){
b2data++;
lcd.setCursor(8,3);
lcd.print (" ");
}
if(b2data == 0){
lcd.setCursor(9,3);
lcd.print("OFF");
}
if(b2data == 1){
EEPROM.write(4,b2data);
lcd.setCursor(9,3);
lcd.print("ON");
btMode();
}
if(b2data == 2){
b2data = 0;
EEPROM.write(4,b2data);
}
}
void btMode(){
BT.begin(9600);
if(BT.available()>0){
char data = BT.read();
switch (data){
case 'A': led1 = 1; EEPROM.write(0,led1 ); break;
case 'B': led2 = 1; EEPROM.write(1,led2 ); break;
case 'C': led3 = 1; EEPROM.write(2,led3 ); break;
case 'D': led4 = 1; EEPROM.write(2,led4 ); break;
case 'a': led1 = 0; EEPROM.write(0,led1 ); break;
case 'b': led2 = 0; EEPROM.write(1,led2 ); break;
case 'c': led3 = 0; EEPROM.write(2,led3 ); break;
case 'd': led4 = 0; EEPROM.write(3,led4 ); break;
}
}
}
void Homelogo(){
byte A6Char[] = {B00000,B00000,B00000,B00001,B00011,B00111,B01111,B11111};
byte A7Char[] = {B00100,B01110,B11111,B11111,B11111,B11111,B11111,B11111};
byte A8Char[] = {B00000,B00000,B00000,B10000,B11000,B11100,B11110,B11111};
byte B26Char[] = {B00111,B00111,B00101,B00101,B00111,B00111,B11111,B11111};
byte B27Char[] = {B11111,B11111,B11111,B10001,B10001,B10001,B10001,B11111};
byte B28Char[] = {B11100,B11100,B10100,B10100,B11100,B11100,B11111,B11111};
lcd.createChar(0, A6Char);
lcd.setCursor(8,0);
lcd.write((byte)0);
lcd.createChar(1, A7Char);
lcd.setCursor(9,0);
lcd.write((byte)1);
lcd.createChar(2, A8Char);
lcd.setCursor(10,0);
lcd.write((byte)2);
lcd.createChar(3, B26Char);
lcd.setCursor(8,1);
lcd.write((byte)3);
lcd.createChar(4, B27Char);
lcd.setCursor(9,1);
lcd.write((byte)4);
lcd.createChar(5, B28Char);
lcd.setCursor(10,1);
lcd.write((byte)5);
lcd.setCursor(3,2);
lcd.print ("_BACK TO HOME_");
lcd.setCursor(3,3);
lcd.write((byte)6);
lcd.setCursor(16,3);
lcd.write((byte)6);
lcd.setCursor(9,3);
lcd.print ("OK");
int bH = digitalRead(3);
if(bH == 0){
b1data = 0;
lcd.clear ();
}
}
void systemStart(){
lcd.setCursor(6,0);
lcd.print("ARDUINO");
lcd.setCursor(2,1);
lcd.print("Operating system");
lcd.setCursor(0,2);
lcd.print("Devloper Rahul Kumar");
delay(1000);
for(int v = 0; v<=19; v++){
lcd.setCursor(v,3);
lcd.write((byte)6);
delay(20);
}
delay(1000);
lcd.clear ();
lcd.setCursor(8,0);
lcd.write ((byte)0);
lcd.setCursor(9,0);
lcd.write((byte)1);
lcd.setCursor(10,0);
lcd.write((byte)2);
lcd.setCursor(8,1);
lcd.write((byte)3);
lcd.setCursor(9,1);
lcd.write((byte)4);
lcd.setCursor(10,1);
lcd.write ((byte)5);
loading (5,2,"_Loading_");
loading(5,2,"_Starting_");
}
void loading (int row, int col, String str){
lcd.setCursor(16,3);
lcd.write((byte)6);
lcd.setCursor(3,3);
lcd.write((byte)6);
for(int pos = 0; pos<=2; pos++){
lcd.setCursor(row ,col);
lcd.print(str);
for(int k = 4; k<= 15; k++){
lcd.setCursor(k,3);
lcd.write((byte)7);
delay(10);
lcd.setCursor(k,3);
lcd.print(" ");
}
for(int j = 15; j>=4; j--){
lcd.setCursor(j,3);
lcd.write((byte)7);
delay(10);
lcd.setCursor(j,3);
lcd.print(" ");
}
}
}
void setup()
{
rtc.begin();
lcd.init();
lcd.createChar(0,a);
lcd.createChar(1,b);
lcd.createChar(2,c);
lcd.createChar(3,d);
lcd.createChar(4,e);
lcd.createChar(5,f);
lcd.createChar(6,box);
lcd.createChar(7,boll); // initialize the lcd
// Print a message to the LCD.
lcd.backlight ();
systemStart();
lcd.clear();
SVD0 = EEPROM.read(0);
SVD1 = EEPROM.read(1);
SVD2 = EEPROM.read(2);
SVD3 = EEPROM.read(3);
SVD4 = EEPROM.read(4);
SVD5 = EEPROM.read(5);
SVD6 = EEPROM.read(6);
led1 = SVD0;
led2 = SVD1;
led3 = SVD2;
led4 = SVD3;
b2data = SVD4;
b4data = SVD5;
b5data = SVD6;
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP );
pinMode(5, INPUT_PULLUP);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
}
void loop()
{
DateTime now = rtc.now();
Year = now.year();
Month = now.month();
Day = now.day();
Hour = now.hour();
Minute = now.minute();
Second = now.second ();
short b1 = digitalRead(2);
if(b1 == 0){
b1data++;
lcd.clear ();
}
//lcd.setCursor(19,0);
//lcd.print(b1data);
if(b1data == 0){
printTime();
}
if(b1data == 2){
Clocklogo();
}
if (b1data == 3){
Btlogo();
}
if(b1data == 4){
Homelogo();
}
if(b1data == 5){
b1data = 1;
}
if(Hour == b5data && Minute == b4data){
digitalWrite(7,led1);
digitalWrite(8,led2);
digitalWrite(9,led3);
digitalWrite(10,led4);
}
}
void printTime(){
lcd.setCursor(7,1);
lcd.print(Hour);
lcd.print (":");
lcd.print(Minute);
lcd.print(":");
lcd.print(Second);
lcd.setCursor(6,2);
lcd.print(Year);
lcd.print(".");
lcd.print(Month);
lcd.print(".");
lcd.print(Day);
if(Second == 9 || Second == 59){
lcd.clear ();
}
}