//--------- Library for lcd ---------//
#include<LiquidCrystal.h>
//--------- Library for RTC ---------//
#include <Wire.h>
#include "ds3231.h"
//--------- Library for DHT ---------//
#include "DHT.h"
//--------- RTC define ---------//
#define BUFF_MAX 128
char recv[BUFF_MAX];
unsigned int recv_size = 0;
unsigned long prev, interval = 1000;
//--------- DHT define ---------//
#define DHTPIN A0
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
//--------- Lcd pin define ---------//
LiquidCrystal lcd (2, 3, 4, 5, 6, 7);
//--------- Switch define ---------//
int menu = A14;
int up = A13;
int down = A12;
int right = A11;
int left = A15;
//--------- Output pins -----------//
int relay1 =A10;
int relay2 =A9;
//--------- Theshold Variables --------//
int temp=32;
int temp2=30;
int humid=70;
int humid2=80;
int mode=1;
//--------- Global variables ---------//
int h = 0;
int i = -1;
int j = 10;
char tempF[6];
char humF[6];
int hum=0;
int tem=0;
long previousMillis = 0;
long currentMillis = 0;
int k6;
long mdelay = 1000;
//---------Storage states of button for debounce function ---------//
boolean current_menu = LOW;
boolean last_menu = LOW;
boolean current_up = LOW;
boolean last_up = LOW;
boolean current_down = LOW;
boolean last_down = LOW;
boolean current_left = LOW;
boolean last_left = LOW;
boolean current_right = LOW;
boolean last_right = LOW;
//--------- Function prototype ---------//
void Dht();
void Rtc();
void key_status();
void display_menu(int);
void time_period(int);
//---------Flag Variable----------//
int a,b,c,z=1,e=0,e1=0,f=0,f1=0,frequency,duration,ut=0,rt=1,ut1=0,ut2=0,ut3=0,ut4=0,k1=0,k2=0,p1,p2,et=0,ft=0,m1=0,m2=0,m3=0,z1=0,z2=0,gh1=0,gh2=10,gh3=1;
void setup() //--------- Put your setup code here, to run once ---------//
{
//--------- Set baud rate ---------//
/* Serial.begin(9600);
//--------- Set relay as output ---------//
pinMode(relay1, OUTPUT);
pinMode(relay2,OUTPUT);
//--------- Set RTC ---------//
Wire.begin();
DS3231_init(DS3231_INTCN);
memset(recv, 0, BUFF_MAX);
//--------- Set DHT ---------//
dht.begin();*/
//--------- Set lcd size ---------//
lcd.begin(20, 4);
/* //---------Initialize Relay to Down---------//
digitalWrite(relay1,HIGH);
digitalWrite(relay2,HIGH);*/
//--------- Welcome text print ---------//
lcd.setCursor(0, 0);
lcd.print("WELCOME TO RENERTEK");
lcd.setCursor(0, 1);
lcd.print(" CONTCT:");
lcd.print("9902358503");
lcd.setCursor(0, 2);
lcd.print(" renertek@gmail.com");
lcd.setCursor(0, 3);
lcd.print(" www.renertek.com");
delay(4000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" POWERED BY");
lcd.setCursor(0, 1);
lcd.print(" NAVAPRAVARTAN");
lcd.setCursor(0, 2);
lcd.print(" CONTACT:");
lcd.print("9051872093");
delay(2000);
lcd.clear();
}
boolean debounce(boolean last, int pin)
{
boolean current = digitalRead(pin);
if(last != current)
{
delay(5);
current = digitalRead(pin);
}
return current;
}
void loop() //--------- Put your main code here, to run repeatedly ---------//
{
/* Rtc();
Dht();
gh1=ut1+12*ut2;
gh2=ut3+12*ut4;
lcd.setCursor(0, 4);
lcd.print(" Press Select ");
mode_operation(3);
key_status();
if(current_right==1)
{
a=1;
}
while(digitalRead(right)==1);
while(a) //MAIN MENU
{
key_status();
if(current_down==1)
{
z++;
}
while(digitalRead(down)==1);
key_status();
if(current_up==1)
{
z--;
}
while(digitalRead(up)==1);
mode=z;
b=1;
//------------------------------------------------------------------------------------------//
if(b==1&&z==1)
lcd.clear();
while(b==1&&z==1)
{
t1();
key_status(); //for up
if(current_up==1)
{
e++;
}
key_status(); //for down.
if(current_down==1)
{
e--;
}
if(e<0)
e=120;
if(e>120)
e=0;
key_status(); //for back..
if(current_left==1)
{
z++;
b=0;
temp=e;
}
while(digitalRead(left)==1);
key_status();
if(current_right==1)
{
z1=1;
b=0;
temp=e;
}
while(digitalRead(right)==1);
}
//-------------------------------------------------------------------------------------------------------//
if(b==1&&z==2)
lcd.clear();
while(b==1&&z==2)
{
h1();
key_status(); //for up
if(current_up==1)
{
f++;
}
key_status(); //for down.
if(current_down==1)
{
f--;
}
if(f<0)
f=100;
if(f>100)
f=0;
key_status(); //for back..
if(current_left==1)
{
z++;
b=0;
humid=f;
}
while(digitalRead(left)==1);
key_status();
if(current_right==1)
{
z1=1;
b=0;
humid=f;
}
while(digitalRead(right)==1);
delay(100);
}
//--------------------------------------------------------------------------------------//
if(b==1&&z==3)
lcd.clear();
while(b==1&&z==3)
{
tim1();
key_status(); //for up
if(current_up==1)
{
if(rt==1)
ut++;
if(rt==2)
ut1++;
if(rt==3)
ut2++;
if(rt==4)
ut3++;
if(rt==5)
ut4++;
}
key_status(); //for down
if(current_down==1)
{ if(rt==1)
ut--;
if(rt==2)
ut1--;
if(rt==3)
ut2--;
if(rt==4)
ut3--;
if(rt==5)
ut4--;
}
key_status(); //for left
if(current_menu==1)
{
rt++;
}
while(digitalRead(menu)==1);
if(rt>5)
rt=1;
if(ut<0)
ut=99;
if(ut>99)
ut=0;
if(ut1<0)
ut1=12;
if(ut1>12)
ut1=0;
if(ut2<0)
ut2=1;
if(ut2>1)
ut2=0;
if(ut3<0)
ut3=12;
if(ut3>12)
ut3=0;
if(ut4<0)
ut4=1;
if(ut4>1)
ut4=0;
key_status(); //for back..
if(current_left==1)
{
z++;
b=0;
}
while(digitalRead(left)==1);
key_status();
if(current_right==1)
{
z1=1;
b=0;
}
while(digitalRead(right)==1);
delay(100);
}
b=1;
//-------------------------------------------------------------------------------------------------------//
while(b==1&&z1==1)
{
lcd.print("Time Base CTR:");
yes_no(m1);
lcd.setCursor(0, 1);
lcd.print("Temp Base CTR:");
yes_no(m2);
lcd.setCursor(0, 2);
lcd.print("Humd Base CTR:");
yes_no(m3);
lcd.setCursor(4, 3);
lcd.print("PRESS NEXT");
delay(100);
lcd.clear();
key_status();
if(current_menu==1)
{
if(z2==0)
m1=flip(m1);
if(z2==1)
m2=flip(m2);
if(z2==2)
m3=flip(m3);
}
while(digitalRead(menu)==1);
key_status();
if(current_left==1)
{
z2++;
}
while(digitalRead(left)==1);
key_status();
if(current_right==1)
{
a=0;
b=0;
z1=0;
}
while(digitalRead(right)==1);
if(z2>2)
z2=0;
}
//-----------------------------------------------------------------------------------------//
if(z>3)
z=1;
if(z<1)
z=3;
lcd.clear();
}*/
}
//------------time_period------------//
void time_period(int n,int i1,int i2,int i3)
{ int x,y,z,v,w;
struct ts t;
DS3231_get(&t);
if ((Serial.available() <= 0))
{
x=t.hour;
y=t.min;
z=x*60+y;
v=z+n;
}
w=1;
p2=1;
while(w==1&&p2==1)
{ delay(100);
DS3231_get(&t);
Rtc();
Dht();
if(i1==1)
mode_operation(1);
if(i2==1)
mode_operation(2);
if ((Serial.available() <= 0))
{
x=t.hour;
y=t.min;
z=x*60+y;
}
if(z==v)
w=0;
key_status();
if(current_right==1)
{
p2=0;
a=1;
}
// while(digitalRead(right)==1);
}
}
//----------Operate Mode-------------//
void mode_operation(int ch)
{
switch(ch)
{
case 1: if(temp<tem)
{
digitalWrite(relay1,LOW);
digitalWrite(relay2,LOW);
}
else
{
digitalWrite(relay1,HIGH);
digitalWrite(relay2,HIGH);
}
break;
case 2: if(humid>hum)
{
digitalWrite(relay1,LOW);
digitalWrite(relay2,LOW);
}
else
{
digitalWrite(relay1,HIGH);
digitalWrite(relay2,HIGH);
}
break;
case 3:
time_period(60,m2,m3,m1);
Mul_delay(ut,m2,m3,m1);
break;
}
}
//--------- Keyboard functon -------//
void key_status()
{
current_menu = debounce(last_menu, menu); //--------- Debounce for menu button ---------//
current_up = debounce(last_up, up); //--------- Debounce for up button ---------//
current_down = debounce(last_down, down); //--------- Debounce for down button ---------//
current_left = debounce(last_left, left); //--------- Debounce for left button ---------//
current_right = debounce(last_right, right); //--------- Debounce for right button ---------//
last_menu = LOW;
last_up = LOW;
last_down = LOW;
last_left = LOW;
last_right = LOW;
}
//--------- DHT function ---------//
void Dht()
{
float temperature, humidity;
humidity = dht.readHumidity();
temperature = dht.readTemperature();
delay(100);
char tempF[6];
char humF[6];
dtostrf(temperature, 5, 1, tempF);
dtostrf(humidity, 2, 0, humF);
lcd.setCursor(0, 2);
lcd.print("T:");
tem=(int)((tempF[1]-48)*10+(tempF[2]-48));
lcd.print(tem);
lcd.print((char)223);
lcd.print("C ");
lcd.print(" H: ");
hum=(int)((humF[0]-48)*10+(humF[1]-48));
lcd.print(hum);
lcd.print("%");
}
//-----------------YES/NO------------------//
void yes_no(int i)
{
if(i==1)
lcd.print("YES");
else
lcd.print("NO");
}
//---------------FLIP SWITCH----------------//
int flip(int i)
{
if(i==0)
return 1;
else if(i==1)
return 0;
}
//--------- Time and Date function ---------//
void Rtc()
{
unsigned long now = millis();
struct ts t;
if ((now - prev > interval) &&(Serial.available() <= 0))
{
DS3231_get(&t);
lcd.setCursor(0, 0);
lcd.print("Date:");
lcd.print(t.mday);
lcd.print(":");
lcd.print(t.mon);
lcd.print(":");
lcd.print(t.year);
lcd.print(" ");
lcd.setCursor(0, 1);
if(t.hour>12)
{
lcd.print("Time:");
lcd.print(t.hour-12);
lcd.print(":");
lcd.print(t.min);
lcd.print(":");
lcd.print(t.sec);
lcd.print(" ");
lcd.setCursor(13, 1);
lcd.print("P.M.");
}
else
{
lcd.print("Time:");
lcd.print(t.hour);
lcd.print(":");
lcd.print(t.min);
lcd.print(":");
lcd.print(t.sec);
lcd.print(" ");
lcd.setCursor(13, 1);
lcd.print("A.M. ");
}
if((gh1 < t.hour)&&(t.hour < gh2))
{
gh3 = 1;
}
else
{
gh3 = 0;
}
prev = now;
}
}
void h1()
{
float temperature, humidity;
humidity = dht.readHumidity();
temperature = dht.readTemperature();
delay(100);
char tempF[6];
char humF[6];
dtostrf(temperature, 5, 1, tempF);
dtostrf(humidity, 2, 0, humF);
lcd.setCursor(5, 0);
lcd.print("HUMI:");
lcd.setCursor(10, 0);
tem=(int)((tempF[1]-48)*10+(tempF[2]-48));
hum=(int)((humF[0]-48)*10+(humF[1]-48));
lcd.print(hum);
lcd.print("%");
lcd.setCursor(1, 1);
lcd.print("Humd Base CTR:");
yes_no(m3);
lcd.setCursor(3, 2);
lcd.print("WATER ON:<");
lcd.print(f);
lcd.print("% ");
lcd.setCursor(0, 3);
lcd.print("USE:SCROLL,U,D,NEXT");
}
void t1()
{
float temperature, humidity;
humidity = dht.readHumidity();
temperature = dht.readTemperature();
delay(100);
char tempF[6];
char humF[6];
dtostrf(temperature, 5, 1, tempF);
dtostrf(humidity, 2, 0, humF);
lcd.setCursor(5, 0);
lcd.print("Temp:");
lcd.setCursor(10, 0);
tem=(int)((tempF[1]-48)*10+(tempF[2]-48));
lcd.print(tem);
lcd.print((char)223);
lcd.print("C");
hum=(int)((humF[0]-48)*10+(humF[1]-48));
lcd.setCursor(1, 1);
lcd.print("Temp Base CTR:");
yes_no(m2);
lcd.setCursor(3, 2);
lcd.print("WATER ON:>");
lcd.print(e);
lcd.print((char)223);
lcd.print("C ");
lcd.setCursor(0, 3);
lcd.print("USE:SCROLL,U,D,NEXT");
}
void tim1()
{
unsigned long now = millis();
struct ts t;
if ((now - prev > interval)&&(Serial.available() <= 0))
{
DS3231_get(&t);
lcd.setCursor(0, 0);
if(t.hour>12)
{
lcd.print(" Time:");
lcd.print(t.hour-12);
lcd.print(":");
lcd.print(t.min);
lcd.print(":");
lcd.print(t.sec);
lcd.print(" ");
lcd.setCursor(14, 0);
lcd.print("P.M.");
}
else
{
lcd.print(" Time:");
lcd.print(t.hour);
lcd.print(":");
lcd.print(t.min);
lcd.print(":");
lcd.print(t.sec);
lcd.print(" ");
lcd.setCursor(14, 0);
lcd.print("A.M.");
}
prev = now;
}
lcd.setCursor(1, 1);
lcd.print("Temp Base CTR:");
yes_no(m1);
lcd.setCursor(0,2);
lcd.print("ON:");
if(ut<10)
{lcd.print(ut);
lcd.print(" ");}
else
lcd.print(ut);
lcd.setCursor(5,2);
lcd.print("S/H");
lcd.setCursor(10,2);
if(ut1<10)
{lcd.print(ut1);
lcd.print(" ");
}
else
lcd.print(ut1);
if(ut2==0)
lcd.print("AM");
else
lcd.print("PM");
lcd.print("To");
lcd.setCursor(16,2);
if(ut3<10)
{lcd.print(ut3);
lcd.print(" ");
}
else
lcd.print(ut3);
if(ut4==0)
lcd.print("AM");
else
lcd.print("PM");
lcd.setCursor(0, 3);
lcd.print("USE:SCROLL,U,D,NEXT");
}
//-------------------------delay-----------------------//
void Mul_delay(int i,int i1,int i2,int i3)
{ mdelay = i*1000;
unsigned long previousMillis = millis();
k6=1;
p1=1;
while(k6==1&&p1==1)
{ currentMillis = millis();
Rtc();
Dht();
if(i1==1)
mode_operation(1);
if(i2==1)
mode_operation(2);
if((currentMillis - previousMillis) < mdelay)
{
if(i3==1 && gh3==1)
{ digitalWrite(relay1, LOW);
digitalWrite(relay2, LOW);
}
}
else
k6=0;
key_status();
if(current_right==1)
{
p1=0;
a=1;
}
}
digitalWrite(relay1, HIGH);
digitalWrite(relay2, HIGH);
}
Comments
Please log in or sign up to comment.