#include <LiquidCrystal_I2C.h> //library untuk LCD --> SCL=D1; SDA=D2
#include <Keypad.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); //20 blocks, 4 lines
const uint8_t ROWS = 4;
const uint8_t COLS = 3;
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
uint8_t rowPins[ROWS] = {32, 33, 25, 26}; //connect to the row pinouts of the keypad
uint8_t colPins[COLS] = {27, 14, 12}; //connect to the column pinouts of the keypad
//Create an object of keypad
Keypad customKeypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //input parameter keypad
char customKey; //Variabel untuk menampung input keypad
int setting = 0; //Variabel angka setting
int realTime;//variable angka realtime sensor
int i = 0; //deteksi sequence keypad
int a = 0; //deteksi sequence operasi pertama
int b = 0; //deteksi sequence seleksi heater
int lastState = HIGH; // seting awal nilai pembaca waktu akhir timer
#define offTimer 15
#define heater1 4 //tanda operasi heater grup1
#define heater2 16 //tanda operasi heater grup2
#define heaterEnd 17 //lampu 3 dan bunyi alarm tanda heater selesai
#define onTimer 5 // perintah timer On (0v)/relay4 NO to terminal H3CR 6 com netral
// perintah timer reset/ relay4 NC to terminal H3CR 6 com netral
void setup(){
pinMode(heater1, OUTPUT);
pinMode(heater2, OUTPUT);
pinMode(heaterEnd, OUTPUT);
pinMode(onTimer, OUTPUT);
pinMode(offTimer, INPUT_PULLUP);//dipencet = LOW, default = HIGH
digitalWrite(heater1, HIGH);//heater grup1 kondisi awal off
digitalWrite(heater2, HIGH);//heater grup2 kondisi awal off
digitalWrite(heaterEnd, HIGH);//lampu dan alarm heater selesai kondisi off
digitalWrite(onTimer, HIGH);//Timer default / instalasi reset
lcd.init(); //memulai LCD
Serial.begin(9600);
lcd.backlight();
// Print a message to the LCD.
lcd.setCursor(0, 0); // set the cursor to column 0, line 0
lcd.print("|====SMART OVEN====|"); //Display a intro message
lcd.setCursor(0, 1);
lcd.print("|<< GKM EMS 2023 >>|");
lcd.setCursor(0, 2);
lcd.print("| By: |");
lcd.setCursor(0, 3);
lcd.print("|======SUHINAR=====|");
delay(3000); //Wait for display to show info
lcd.clear(); //Then clean it
lcd.print("Setting T :_ C");
lcd.setCursor(0,3);
lcd.print("*Limit T Max = 399 C");
//program baca keypad dan input setting
//=======================================
while (i<4){
customKey = customKeypad.getKey(); //Baca input keypad
if (i<1){ //digit pertama dibatasi untuk mengendalikan angka max 3ratusan
switch(customKey){ //Jika
case '0' ... '3': //Nilai 0 - 3, maka
lcd.setCursor(11,0);
setting = setting * 10 + (customKey - '0');
lcd.print(setting); //Tampilkan angka
i++;
break;}
}
else if (i>0 && i<3){
switch(customKey){ //Jika
case '0' ... '9': //Nilai 0 - 9, maka
lcd.setCursor(11,0);
setting = setting * 10 + (customKey - '0');
lcd.print(setting); //Tampilkan angka
i++;
if(i == 3){
lcd.setCursor(0,1);
lcd.print("TEKAN TOMBOL [#]");
break;}
}
}
else if(i==3){
switch(customKey){
case '#':
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Setting T : C");
lcd.setCursor(11,0);
lcd.print(setting);
digitalWrite(onTimer, LOW);//Timer mulai menghitung
digitalWrite(heater1, LOW);//nyalakan heater 1
delay(1000);
digitalWrite(heater2, LOW);//nyalakan heater 2
i++;
a=0;
b=0;
break;}
}
}
}//close setup
//===================PROGRAM RESETTING=============================
void deteksiResetting(){
customKey = customKeypad.getKey(); //Baca input keypad
if (customKey == '*'){
int setting = 0; //Variabel angka setting
int realTime;//variable angka realtime sensor
int i = 0; //deteksi sequence keypad
int a = 0; //deteksi sequence operasi pertama
int b = 0; //deteksi sequence seleksi heater
int lastState = HIGH; // seting awal nilai pembaca waktu akhir timer
digitalWrite(heater1, HIGH);//heater grup1 kondisi awal off
delay (2000);
digitalWrite(heater2, HIGH);//heater grup2 kondisi awal off
digitalWrite(heaterEnd, HIGH);//lampu dan alarm heater selesai kondisi off
digitalWrite(onTimer, HIGH);//Timer default / instalasi reset
lcd.setCursor(0,0);
lcd.print("Setting T :_ C");
lcd.setCursor(0,3);
lcd.print("*Limit T Max = 399 C");
//program baca keypad dan input setting
//=======================================
while (i<4){
customKey = customKeypad.getKey(); //Baca input keypad
if (i<1){ //digit pertama dibatasi untuk mengendalikan angka max 3ratusan
switch(customKey){ //Jika
case '0' ... '3': //Nilai 0 - 3, maka
lcd.setCursor(11,0);
setting = setting * 10 + (customKey - '0');
lcd.print(setting); //Tampilkan angka
i++;
break;}
}
else if (i>0 && i<3){
switch(customKey){ //Jika
case '0' ... '9': //Nilai 0 - 9, maka
lcd.setCursor(11,0);
setting = setting * 10 + (customKey - '0');
lcd.print(setting); //Tampilkan angka
i++;
if(i == 3){
lcd.setCursor(0,1);
lcd.print("TEKAN TOMBOL [#]");
break;}
}
}
else if(i==3){
switch(customKey){
case '#':
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Setting T : C");
lcd.setCursor(11,0);
lcd.print(setting);
digitalWrite(onTimer, LOW);//Timer mulai menghitung
digitalWrite(heater1, LOW);//nyalakan heater 1
delay(1000);
digitalWrite(heater2, LOW);//nyalakan heater 2
i++;
a=0;
b=0;
break;}
}
}
}
}
//================================================================
void loop(){
//======baca sensor======
const float BETA = 3950; // should match the Beta Coefficient of the thermistor
int analogValue = analogRead(13);
int realTime = 1 / (log(1 / (4095. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
lcd.setCursor(0,1);
lcd.print("T terukur :");
lcd.print(realTime);
lcd.setCursor(15,1);
lcd.print("C");
lcd.setCursor(0,3);
lcd.print("Tekan (*) for RESET");
deteksiResetting();
//=======MODE1=============
while (a==0){
//======baca sensor======
const float BETA = 3950; // should match the Beta Coefficient of the thermistor
int analogValue = analogRead(13);
int realTime = 1 / (log(1 / (4095. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
lcd.setCursor(0,1);
lcd.print("T terukur :");
lcd.print(realTime);
lcd.setCursor(15,1);
lcd.print("C");
lcd.setCursor(0,3);
lcd.print("Tekan (*) for RESET");
deteksiResetting();
//=======================
if (realTime >= (setting + 1)){
a++;
digitalWrite(heater1, HIGH);//matikan 2 heater
delay (1000);
digitalWrite(heater2, HIGH);}
//=====deteksi timer=======
int value = digitalRead((offTimer));
if (lastState != value) {
lastState = value;
if (value == LOW) {
while (value == LOW){
digitalWrite(heaterEnd, LOW); //nyalakan alarm
Serial.println("pressed");
digitalWrite(heater1, HIGH);
delay (1000);
digitalWrite(heater2, HIGH);
//lcd.clear();
lcd.setCursor(0,0);
lcd.print(" WAKTU HABIS !!!!");
//======baca sensor======
const float BETA = 3950; // should match the Beta Coefficient of the thermistor
int analogValue = analogRead(13);
int realTime = 1 / (log(1 / (4095. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
lcd.setCursor(0,1);
lcd.print("T terukur :");
lcd.print(realTime);
lcd.setCursor(15,1);
lcd.print("C");
lcd.setCursor(0,3);
lcd.print("MATIKAN CONTROL OVEN");}
}
}
}
//================================
//=======MODE2=============
while (a>0){
//===seleksi heater1=======
if (b==0){
//======baca sensor======
const float BETA = 3950; // should match the Beta Coefficient of the thermistor
int analogValue = analogRead(13);
int realTime = 1 / (log(1 / (4095. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
lcd.setCursor(0,1);
lcd.print("T terukur :");
lcd.print(realTime);
lcd.setCursor(15,1);
lcd.print("C");
deteksiResetting();
lcd.setCursor(0,3);
lcd.print("Tekan (*) for RESET");
deteksiResetting();
//=======================
if (realTime >= (setting - 5) && realTime <= setting){
digitalWrite(heater1, LOW);//heater1 nyala
digitalWrite(heater2, HIGH);}
if (realTime < (setting - 5)){
digitalWrite(heater1, LOW);//2 heater nyala
delay (1000);
digitalWrite(heater2, LOW);}
if (realTime >= (setting + 1)){
b++;
digitalWrite(heater1, HIGH);//2 heater mati
delay (1000);
digitalWrite(heater2, HIGH);}
//=====deteksi timer=======
int value = digitalRead(15);
if (lastState != value) {
lastState = value;
if (value == LOW) {
while (value == LOW){
digitalWrite(heaterEnd, LOW); //nyalakan alarm
Serial.println("pressed");
digitalWrite(heater1, HIGH);
delay (1000);
digitalWrite(heater2, HIGH);
//lcd.clear();
lcd.setCursor(0,0);
lcd.print(" WAKTU HABIS !!!!");
//======baca sensor======
const float BETA = 3950; // should match the Beta Coefficient of the thermistor
int analogValue = analogRead(13);
int realTime = 1 / (log(1 / (4095. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
lcd.setCursor(0,1);
lcd.print("T terukur :");
lcd.print(realTime);
lcd.setCursor(15,1);
lcd.print("C");
lcd.setCursor(0,3);
lcd.print("MATIKAN CONTROL OVEN");}
}
}
}
//===seleksi heater2=======
if (b>0){
//======baca sensor======
const float BETA = 3950; // should match the Beta Coefficient of the thermistor
int analogValue = analogRead(13);
int realTime = 1 / (log(1 / (4095. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
lcd.setCursor(0,1);
lcd.print("T terukur :");
lcd.print(realTime);
lcd.setCursor(15,1);
lcd.print("C");
lcd.setCursor(0,3);
lcd.print("Tekan (*) for RESET");
deteksiResetting();
//=======================
if (realTime >= (setting - 5) && realTime <= setting){
digitalWrite(heater1, HIGH);
digitalWrite(heater2, LOW);} //heater2 nyala
if (realTime < (setting - 5)){
digitalWrite(heater1, LOW);//2 heater nyala
delay (1000);
digitalWrite(heater2, LOW);}
if (realTime >= (setting + 1)){
b=0;
digitalWrite(heater1, HIGH);//2 heater mati
delay (1000);
digitalWrite(heater2, HIGH);}
//=====deteksi timer=======
int value = digitalRead(15);
if (lastState != value) {
lastState = value;
if (value == LOW) {
while (value == LOW){
digitalWrite(heaterEnd, LOW); //nyalakan alarm
Serial.println("pressed");
digitalWrite(heater1, HIGH);
delay (1000);
digitalWrite(heater2, HIGH);
//lcd.clear();
lcd.setCursor(0,0);
lcd.print(" WAKTU HABIS !!!!");
//======baca sensor======
const float BETA = 3950; // should match the Beta Coefficient of the thermistor
int analogValue = analogRead(13);
int realTime = 1 / (log(1 / (4095. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
lcd.setCursor(0,1);
lcd.print("T terukur :");
lcd.print(realTime);
lcd.setCursor(15,1);
lcd.print("C");
lcd.setCursor(0,3);
lcd.print("MATIKAN CONTROL OVEN");}
}
}
}
}
//===========================
}
esp:VIN
esp:GND.2
esp:D13
esp:D12
esp:D14
esp:D27
esp:D26
esp:D25
esp:D33
esp:D32
esp:D35
esp:D34
esp:VN
esp:VP
esp:EN
esp:3V3
esp:GND.1
esp:D15
esp:D2
esp:D4
esp:RX2
esp:TX2
esp:D5
esp:D18
esp:D19
esp:D21
esp:RX0
esp:TX0
esp:D22
esp:D23
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
keypad1:R1
keypad1:R2
keypad1:R3
keypad1:R4
keypad1:C1
keypad1:C2
keypad1:C3
keypad1:C4
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C
led4:A
led4:C
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
ntc1:GND
ntc1:VCC
ntc1:OUT