#include <LiquidCrystal_I2C.h> // library i2c LCD
//#include <Wire.h> // library I2C
#include "DHT.h" // library DHT sensor
#define DHTPIN 10 // pin data DHT at D11
#define DHTTYPE DHT22 // DHT type DHT22/ AM2302
LiquidCrystal_I2C lcd(0x27,20,4); // set i2c lcd addr to 0x27
DHT dht(DHTPIN, DHTTYPE);
extern volatile unsigned long timer0_millis;
unsigned long current_time;
unsigned long time_=0;
unsigned long time1_=0;
const int Potensio = A1;
int value,suhumax,suhumin;
int start = 4;
int reset = 3;
int coil = 7;
int fan = 8;
int T,Tmin;
bool startbutton=0;
bool resetbutton=0;
bool pushed_1=0;
bool pushed_2=0;
void setup()
{
// put your setup code here, to run once:
Serial.begin(9600);
Wire.begin();
dht.begin();
lcd.begin(16,2);
lcd.setBacklight(255);
pinMode(Potensio, INPUT);
pinMode(start, INPUT);
pinMode(reset, INPUT);
pinMode(coil, OUTPUT);
pinMode(fan, OUTPUT);
digitalWrite(fan, HIGH);
digitalWrite(coil, HIGH);
time_=millis();
time1_=millis();
lcd.setCursor(0,0);
lcd.print("DRYING BOX WITH");
lcd.setCursor(1,1);
lcd.print("COOLING SYSTEM");
delay(2000);
lcd.clear();
lcd.setCursor(1,0);
lcd.print("PT WILMAR PADI");
lcd.setCursor(3,1);
lcd.print("INDONESIA");
delay(2000);
}
void loop()
{
// put your main code here, to run repeatedly:
lcd.clear();
lcd.setCursor(10,0);
lcd.print("PRESS");
lcd.setCursor(10,1);
lcd.print("START");
value=analogRead(Potensio);
suhumax = map(value,0,1023,0,100);
suhumin = suhumax-2;
startbutton = digitalRead(start);
resetbutton = digitalRead(reset);
int suhu = dht.readTemperature(); // read temp on celcius
float hum = dht.readHumidity(); // read humidity
if (startbutton==HIGH)
{ lcd.clear();
pushed_1=1-pushed_1;
}
if (pushed_1==HIGH)
{
timer0_millis=millis();
current_time=millis();
if((current_time-time_)<600000)
{ lcd.clear();
lcd.setCursor(10,0);
lcd.print("DRYING");
lcd.setCursor(10,1);
lcd.print("MODE");
if ((current_time-time_)>=0&&(current_time-time_)<=120000)
{ T=54;
Tmin=T-2;
if( suhu <= Tmin )
{
digitalWrite(coil, LOW);//coil pemanas ON
digitalWrite(fan, LOW);//fan ON
}
if (suhu>T)
{
digitalWrite(coil, HIGH);//coil pemanas OFF
digitalWrite(fan, LOW);//fan ON
}
}
if ((current_time-time_)>=120000&&(current_time-time_)<=240000)
{ T=52;
Tmin=T-2;
if( suhu <= Tmin )
{
digitalWrite(coil, LOW);//coil pemanas ON
digitalWrite(fan, LOW);//fan ON
}
if (suhu>T)
{
digitalWrite(coil, HIGH);//coil pemanas OFF
digitalWrite(fan, LOW);//fan ON
}
}
if ((current_time-time_)>=240000&&(current_time-time_)<=360000)
{ T=50;
Tmin=T-2;
if( suhu <= Tmin )
{
digitalWrite(coil, LOW);//coil pemanas ON
digitalWrite(fan, LOW);//fan ON
}
if (suhu>T)
{
digitalWrite(coil, HIGH);//coil pemanas OFF
digitalWrite(fan, LOW);//fan ON
}
}
if ((current_time-time_)>=360000&&(current_time-time_)<=480000)
{ T=48;
Tmin=T-2;
if( suhu <= Tmin )
{
digitalWrite(coil, LOW);//coil pemanas ON
digitalWrite(fan, LOW);//fan ON
}
if (suhu>T)
{
digitalWrite(coil, HIGH);//coil pemanas OFF
digitalWrite(fan, LOW);//fan ON
}
}
if ((current_time-time_)>=480000&&(current_time-time_)<=600000)
{ T=46;
Tmin=T-2;
if( suhu <= Tmin )
{
digitalWrite(coil, LOW);//coil pemanas ON
digitalWrite(fan, LOW);//fan ON
}
if (suhu>T)
{
digitalWrite(coil, HIGH);//coil pemanas OFF
digitalWrite(fan, LOW);//fan ON
}
}
}
if((current_time-time1_)>600000)
{ lcd.clear();
lcd.setCursor(9,0);
lcd.print("COOLING");
lcd.setCursor(11,1);
lcd.print("MODE");
T=40;
Tmin=T-2;
if( suhu <= Tmin )
{
digitalWrite(coil, LOW);//coil pemanas ON
digitalWrite(fan, LOW);//fan ON
}
if (suhu>T)
{
digitalWrite(coil, HIGH);//coil pemanas OFF
digitalWrite(fan, LOW);//fan ON
}
}
if ((current_time-time1_)>6020000)
{ lcd.clear();
lcd.setCursor(11,0);
lcd.print("END");
lcd.setCursor(9,1);
lcd.print("PROCESS");
digitalWrite(coil, HIGH);//coil pemanas OFF
digitalWrite(fan, HIGH);//fan OFF
}
}
if (resetbutton==HIGH)
{ lcd.clear();
pushed_2=1-pushed_2;
}
if (pushed_2==HIGH)
{ pushed_1=0;
digitalWrite(coil, HIGH);//coil pemanas OFF
digitalWrite(fan, HIGH);//fan OFF
lcd.setCursor(10,0);
lcd.print("PRESS");
lcd.setCursor(10,1);
lcd.print("RESET");
noInterrupts();
timer0_millis=0;
interrupts();
}
Serial.println(time_);
Serial.println(millis());
Serial.println(current_time);
lcd.setCursor(5,0);
lcd.print(T);
lcd.print("C");
lcd.setCursor(0,0);
lcd.print("T=");
lcd.print(suhu);
lcd.print("/");
lcd.setCursor(0,1);
lcd.print("H=");
lcd.print(hum,1);
lcd.print("%");
delay(1000);
}